Android Studio JNI:无法编译JPEG c库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio JNI:无法编译JPEG c库相关的知识,希望对你有一定的参考价值。

我的程序需要从本机文件中读取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源文件,但这就是全部。我不知道是不够的......

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

答案

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

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

另一答案

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

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

-INT32到int32_t

- #define boolean bool

- #define外部EXTERN

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

-和更多...

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

以上是关于Android Studio JNI:无法编译JPEG c库的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio编译JNI时指定CPU种类

如何在没有Android Studio的情况下编译JNI共享库,并在[关闭]中编译依赖项

Android Studio 开发JNI应用

Android Studio Cmake:“C 编译器 clang.exe 无法编译简单的测试程序

android studio ndk开发遇到的问题

android studio ndk开发遇到的问题