Android Studio JNI:无法编译JPEG c库

问题描述 投票:1回答:2

我的程序需要从本机文件中读取jpeg-images。为此,我下载了官方jpeglib c源代码,并且在该程序的Windows版本上完美运行,该程序使用Embarcadero RAD Studio 8进行编程。

但是当我尝试在Android Studio JNI中使用相同的源代码时,我看到几乎每个c源文件都有很多错误:(下面是截图:

Screenshot

如您所见,两者都有错误

-Macro扩展(ERREXIT,红色下划线),抱怨“阶级'blahblah'没有一个字段'blahblah'”。

- 成员方法(代码中的红色文本),也抱怨“类'blahblah'没有字段'blahblah'”。

看起来有很多C语言类和字段,或者可能都是,它们都不起作用。但jpeglib源代码肯定包含它们,有些东西在Android Studio中无效!可能Android Studio C编译器有些限制,但必须有一些方法可以绕过它......

C ++源文件中不存在此问题。我有不同的源文件夹用于java和C ++源文件(并且还有单独的jni文件夹,但我不使用它,可能我应该),但C源文件驻留在C ++文件夹中。我已经在CMakeLists.txt的add_library()指令的括号内添加了所有c,cpp,h和hpp源文件,但这就是全部。我不知道是不够的......

我很高兴得到任何建议如何解决这个问题。

android c++ c java-native-interface jpeg
2个回答
1
投票

仅将所有libjpeg文件添加到add_library()是不够的。该库预计将针对特定工具链进行配置,请参阅例如这example

我更喜欢这个库的优化版本,叫做libjpeg-turbo。在GitHub上,您可以找到如何为Android交叉编译库的分步说明。


0
投票

好吧,似乎有幸福的结局......

我不得不承认Android Studio最有可能编译JPEG c库:)问题“类'blahblah'没有字段'blahblah'”是因为需要为特定的工具链配置库,比如@Alex科恩说。但是配置不会发生在CMakeLists.txt中,而是需要在某种程度上重写代码本身。例如,您需要更改

-INT32到int32_t

- #define boolean bool

- #define外部EXTERN

- 添加了许多#include <>和#include“”

-和更多...

如果您需要这样做,请从头文件开始:在没有头文件错误之前,请不要触摸C文件。作为旁注,我在Android Studio中的构建顺序与Embarcadero Studio中的构建顺序完全相同,但这并没有帮助成功......我还不知道,这个修改后的库是否有效,但至少我我想我会摆脱编译错误!

© www.soinside.com 2019 - 2024. All rights reserved.