Android Studio JNI:无法编译JPEG c库

时间:2018-09-02 19:03:36

标签: android c++ c java-native-interface jpeg

我的程序需要从本地文件读取jpeg图像。为此,我下载了正式的jpeglib c源代码,该代码可在该程序的Windows版本上完美运行,该程序是使用Embarcadero RAD Studio 8编程的。

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

Screenshot

如您所见,两者都有错误

-宏扩展(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源文件,仅此而已。我不知道这够吗...

很高兴得到解决此问题的建议。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

嗯,结局似乎很幸福...

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

-INT32到int32_t

-#define布尔布尔值

-#define EXTERN extern

-添加大量的#include <>和#include“”

-还有更多...

如果需要这样做,请从头文件开始:在没有头错误的情况下,请不要触摸C文件。附带说明一下,我在Android Studio中的构建顺序与在Embarcadero Studio中的构建顺序完全相同,但这并没有成功……我不知道,这个修改后的库是否可以正常工作,但至少我可以认为我会摆脱编译错误!