【问题标题】:include <jni.h> and compile with arm-linux-gnueabi-gcc包含 <jni.h> 并使用 arm-linux-gnueabi-gcc 编译
【发布时间】:2025-12-10 14:25:02
【问题描述】:

原因在 Android gcc sysroot and linker 用于在 Ubuntu 上编译 NDK 项目,我正在使用 arm-linux-gnueabi-gcc 编译我的 Android NDK 项目。编译时没有 Android-NDK 特定的包含没有问题,但现在包含 jni.h

arm-linux-gnueabi-gcc -static -o main.exe main.c -I'path/to/native_app_glue' -I'/path/to/android-14/arch-arm/usr/include'

我收到一些神秘错误undefined reference to __sF

有谁知道可能出了什么问题,或者有人使用jni.h 获得了 Android NDK 项目,以便使用这样的独立工具链成功编译?

【问题讨论】:

    标签: gcc android-ndk arm


    【解决方案1】:

    除非您静态链接所有内容,否则使用 arm-linux-gnueabi- 工具链进行编译将无法正常工作,因为 Android 使用的 soname 与 Ubuntu 不同。

    【讨论】:

    • 你能拼出arm-linux-gnueabi-gcc 声明来让它工作吗?
    • -static 添加到CFLAGS/CXXFLAGS。但是,您应该注意许可证:LGPL 要求您将程序的目标文件提供给任何请求它们的人。
    • 这对我有用arm-linux-gnueabi-gcc -c ./main.c -o ./main.o -static -g --sysroot='/mnt/hgfs/F/android-ndk-r8d/platforms/android-14/arch-arm' idk CFLAGS 是如何工作的。