听闻少年二字,当与平庸相斥。这篇文章主要讲述Android Studio JNI:无法编译JPEG c库相关的知识,希望能为你提供帮助。
我的程序需要从本机文件中读取jpeg-images。为此,我下载了官方jpeglib c源代码,并且在该程序的Windows版本上完美运行,该程序使用Embarcadero RAD Studio 8进行编程。
但是当我尝试在android Studio JNI中使用相同的源代码时,我看到几乎每个c源文件都有很多错误:(下面是截图:
文章图片
如您所见,两者都有错误
-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“”
-和更多...
【Android Studio JNI(无法编译JPEG c库)】如果您需要这样做,请从头文件开始:在没有头文件错误之前,请不要触摸C文件。作为旁注,我在Android Studio中的构建顺序与Embarcadero Studio中的构建顺序完全相同,但这并没有帮助成功......我还不知道,这个修改后的库是否有效,但至少我我想我会摆脱编译错误!
推荐阅读
- 在YUV_420_888中将图像从Android发送到OpenCV Mat中的JNI的最有效方式
- 关于Android SDK本机方法
- Android - 在使用WebRTC发送到Wowza Streaming Engine之前旋转视频帧
- 如何在android studio项目中包含共享库()
- 本文教你处理u盘插上没反应
- 金士顿U盘修好工具推荐
- 本文教你安装usb无线网卡
- 本文教你U盘写保护怎样处理
- 本文教你U盘病毒怎样办