我正在更新我的项目以使用Android ndk 16b,它之前使用的是12b (工作正常)。更新后,我在构建最终的.so时遇到了以下错误:
/Users/ssk/code/client/git/thirdparty/android-ndk-r16b/android-ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../shared-library/SharedCommon/build/arm-linux-androideabi/lib/libSharedCommon.a: no archive symbol table (run ranlib)
这导致了一堆链接器错误。我尝试了以下答案:
Android NDK: no archive symbol table
How to run ranlib on an archive built through Android.mk?
no archive symbol table (run ranlib) while building libcryptopp.a through ndk-build
不走运。
发布于 2018-09-20 11:45:12
您需要使用GNU AR构建静态库(就像我们在NDK中包含的那样,与GCC位于同一目录)。Darwin的AR是不会自动执行ranlib任务的BSD AR。
发布于 2019-07-08 19:50:58
在交叉编译android库时,我遇到了类似的问题。
出现这个问题是因为我没有指定用于交叉编译的ranlib工具,并且它在构建系统中使用了默认的x86工具。
通过在编译前的配置阶段将ranlib指定为arm-linux-androideabi-ranlib
,解决了此问题。
发布于 2021-02-02 22:25:20
对于我的一个库添加
NDK=$HOME/ndk/21.3.6528147/toolchains/llvm/prebuilt/darwin-x86_64/bin/
cmake -DCMAKE_RANLIB=$NDK/x86_64-linux-android-ranlib ...
已修复此问题。对于另一个库,它不工作,也需要添加
-DCMAKE_C_COMPILER_RANLIB=$NDK/x86_64-linux-android-ranlib -DCMAKE_CXX_COMPILER_RANLIB=$NDK/x86_64-linux-android-ranlib ...
此外,您可能还需要添加对ar
ndk工具的引用
-DCMAKE_AR=$NDK/x86_64-linux-android-ar
添加C
或CXX
取决于您使用的是gcc/clang还是gcc++/clang++。要设置正确的编译器,请使用像DCMAKE_C_COMPILER
或cmake
的DCMAKE_CXX_COMPILER
这样的标志。
https://stackoverflow.com/questions/52397410
复制相似问题