gpt4 book ai didi

android - 使用 NDK cmake 链接静态库 libm.a 或 libc.a

转载 作者:行者123 更新时间:2023-11-30 05:21:42 26 4
gpt4 key购买 nike

在 Android Studio 中使用 NDK Cmake 构建系统时,是否可以链接 platforms\android-XX\arch-arm\usr\lib*.a 版本的库?我正在使用 LLVM 工具链和 Android NDK 13。

我尝试修改示例应用程序,更改文件:https://github.com/googlesamples/android-ndk/blob/master-cmake/hello-jni/app/src/main/cpp/CMakeLists.txt

进行以下修改(添加 libm.a):

target_link_libraries(hello-jni libm.a android log)

构建成功,但 readelf -d 显示 libm.so 仍处于链接状态:

 0x00000001 (NEEDED)                     Shared library: [libandroid.so]
0x00000001 (NEEDED) Shared library: [liblog.so]
0x00000001 (NEEDED) Shared library: [libm.so]
0x00000001 (NEEDED) Shared library: [libdl.so]
0x00000001 (NEEDED) Shared library: [libc.so]

当同时添加 libc.a 时,情况变得更糟,构建失败:

Error:error: relocation overflow in R_ARM_THM_JUMP11
Error:error: linker command failed with exit code 1 (use -v to see invocation)

顺便说一句,有时我只看到最后一个错误而没有任何解释(例如,拼错库名称时)。我应该设置 -v 标志以查看更多详细信息吗?怎么做?

最佳答案

如果您只是想让它编译,我会尝试使用 arm-linux-androideabi-gcc 而不是 clang。我意识到 gcc 已贬值。但如果你的目标是编译或理解问题,我不能。从 Dan 的评论来看,我假设他不相信他在 aosp 中评论的任何标志会有帮助(见下面的链接)

https://android.googlesource.com/platform/build/+/master/core/clang/config.mk

FWIW,我倾向于总是使用我所做的 aosp/bionic 构建中的静态库,因为我从事许多需要它们的工作。 sdk 版本之间的 bionics libc 中包含的符号往往存在太多不一致,我相信在大多数情况下,为了静态链接它需要使用 libc.a。如果您要使用静态 libc 的 ndk 版本,我建议您使用平台 21 而不是 24。

我认为,由于 Android 非常分散,而且所有设备都使用不同的 libc.so、libdl.so 等,因此不会引起太多问题。

编辑:误读了问题。

关于android - 使用 NDK cmake 链接静态库 libm.a 或 libc.a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39982859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com