将静态库链接到 Android NDK 时未定义符号

Undefined symbol when linking static library to Android NDK

提问人:Makoren 提问时间:10/2/2023 最后编辑:Makoren 更新时间:10/3/2023 访问量:107

问:

我正在使用 SDL 存储库提供的 Gradle 项目来与 Android 构建一起使用。就其本身而言,该项目构建良好,可以完全访问 SDL。但是我有一个静态库,我正在尝试将其链接到这个项目,该项目负责应用程序逻辑。

我的应用层次结构如下所示:

app/jni/src/arm64-v8a/libsdl-test-arm64-v8a.a
app/jni/src/armeabi-v7a/libsdl-test-armeabi-v7a.a
app/jni/src/x86/libsdl-test-x86.a
app/jni/src/x86_64/libsdl-test-x86_64.a
app/jni/src/Android.mk
app/jni/src/main.c        // calls appInit, defined by the static library
app/jni/src/sdl-test.h    // declares void appInit();

根据我目前所学到的知识,链接静态库需要修改 Android.mk 文件。这是我的:https://pastebin.com/qhNCyc0c(该库是用 Zig 编写的,因此其他评论令人困惑)

我在 Android 上运行时遇到的错误是这样的:

ld: error: undefined symbol: appInit
>>> referenced by main.c:5 (jni/src/main.c:5)
>>>               /Users/mak/dev/zig/sdl-test/android/android-template/app/build/intermediates/cxx/Debug/29445a3u/obj/local/arm64-v8a/objs-debug/main/main.o:(main)

我可以通过在用于创建库的对象文件上运行来确认该库具有正确的体系结构:file

libsdl-test-arm64-v8a.a.o: ELF 64-bit LSB relocatable, ARM aarch64, version 1 (SYSV), with debug_info, not stripped

我在这里错过了什么?

安卓 android-ndk sdl 静态库

评论

1赞 Michael 10/3/2023
您的模块似乎缺少mainLOCAL_STATIC_LIBRARIES := sdl-test

答:

0赞 Makoren 10/3/2023 #1

事实证明,我在主模块中需要:LOCAL_STATIC_LIBRARIES

LOCAL_STATIC_LIBRARIES := sdl-test