【问题标题】:Android NDK: no archive symbol table (run ranlib)Android NDK:没有存档符号表(运行ranlib)
【发布时间】:2018-09-19 03:05:48
【问题描述】:

我正在更新我的项目以使用 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

没有运气。

【问题讨论】:

    标签: android android-ndk java-native-interface


    【解决方案1】:

    您需要使用 GNU AR 构建静态库(就像我们包含在 NDK 中的那个,与 GCC 相同的目录)。 Darwin 的 AR 是一种 BSD AR,不会自动执行 ranlib 任务。

    【讨论】:

      【解决方案2】:

      在为 android 交叉编译库时,我遇到了类似的问题。

      问题的产生是因为我没有指定ranlib 工具进行交叉编译,它回退到使用构建系统中的默认工具,即x86。

      通过在编译前的配置阶段将ranlib指定为arm-linux-androideabi-ranlib解决了这个问题。

      【讨论】:

        【解决方案3】:

        为我的一个图书馆添加

        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
        

        添加CCXX 取决于您使用的gcc/clang 或gcc++/clang++。要设置正确的编译器,请使用DCMAKE_C_COMPILERDCMAKE_CXX_COMPILER 之类的标志来表示cmake

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-30
          • 1970-01-01
          • 2016-07-20
          • 1970-01-01
          • 2014-05-29
          • 2014-06-29
          • 2020-07-01
          相关资源
          最近更新 更多