【问题标题】:Android Studio JNI: cannot compile JPEG c-libraryAndroid Studio JNI:无法编译 JPEG c 库
【发布时间】:2018-09-02 19:03:35
【问题描述】:

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

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

如你所见,两者都有错误

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

我很高兴收到任何解决此问题的建议。

【问题讨论】:

  • 第一条错误信息是什么?头文件都找到了吗?
  • 获取tour、阅读How to Askminimal reproducible example。您的 IDE 的图像非常无用。从您的构建日志中发布错误消息。如有必要,发布代码。您可能只是在 includes 环境变量或构建配置文件中缺少一两个路径。
  • @thejonny 当我单击重建项目时,列出的第一个错误是“字段类型不完整'xPen'”,它来自 cpp 文件。编译器在转到 c 文件之前停止构建。找到了所有头文件,但我将在 h 和 hpp 文件之间重新检查。我想我不需要在 CMakeLists 中列出与 c 或 cpp 文件同名的头文件。 jwdonahue 感谢您的支持,但我认为我的问题是我能写的最好的。
  • 为什么投反对票?
  • 希望下面的帖子能帮到你:stackoverflow.com/questions/51613950/…

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    我不得不承认,Android Studio 很可能可以编译 JPEG c-library:) 问题“class 'blahblah' doesn't have a field 'blahblah'”是因为该库需要针对特定​​的工具链进行配置,就像@Alex Cohn 说的。但是配置不会发生在 CMakeLists.txt 中,而是需要在某种程度上重写代码本身。比如你需要改变

    -INT32 到 int32_t

    -#define boolean bool

    -#define EXTERN 外部

    -添加很多#include 和#include ""

    -还有更多...

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

    【讨论】:

    • Jepp,它现在可以工作了:) 我需要重写库的一些主要结构并将 c 文件更改为 cpp 文件。 android studio永远不会接受原始结构:(
    猜你喜欢
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多