我有一个独立的工具链NDK13b,api19,llvm 3.8编译器,arm 32位,带libcpp(llvm C ++库)
我想避免依赖libgcc,所以我构建了compiler-rt。我能找到的最好的版本(给我留下最少的未定义符号)来自https://android.googlesource.com/platform/external/compiler-rt/
在我的链接中,我有:
-nodefaultlibs
避免链接到libgcc,并且:
-lc++_static -lc++abi -lunwind -latomic -ldl -lm -lc -landroid -landroid_support -lclang_rt.builtins-arm -latomic
链接到所有标准库。
当我尝试链接我的程序时,我得到以下未定义的引用:
/usr/local/google/buildbot/src/android/ndk-r13-release/external/libcxx/src/algorithm.cpp:83: 错误:未定义引用' __ sync_val_compare_and_swap_1' /usr/local/google/buildbot/src/android/ndk-r13-release/external/libcxx/src/ios.cpp:74: 错误:未定义引用' __ sync_val_compare_and_swap_1' /usr/local/google/buildbot/src/android/ndk-r13-release/external/libcxx/src/locale.cpp:53: 错误:未定义引用' __ sync_val_compare_and_swap_1' /usr/local/google/buildbot/src/android/ndk-r13-release/external/libcxx/src/locale.cpp:464: 错误:未定义参考' __ sync_val_compare_and_swap_1'
有没有办法绕过这个,例如通过定义自己的功能,或者链接一个额外的库?
当我尝试使用here中的代码时(实际上是sync_val_compare_and_swap
没有_1
),我得到了:
../ LIB /建宏/ sync_val_compare_and_swap_1.c ../lib/builtins/sync_val_compare_and_swap_1.c:6:16:错误:冲突 ' __ sync_val_compare_and_swap_1'的类型内联int32_t __sync_val_compare_and_swap_1(volatile int32_t * ptr,int32_t oldval,int32_t newval)
^
../ lib / builtins / sync_val_compare_and_swap_1.c:6:16:注意:' __ sync_val_compare_and_swap_1'是一个内置类型' char(volatile char *,char,char,...)'
答案 0 :(得分:1)
问题是我在
中链接库link_directories("${COMPILER_PATH}/../arm-linux-androideabi/lib")
有效地存在varius libatomic.a,libstdc ++。a等。但正确的版本显然在子文件夹armv7-a中,所以应该是:
link_directories("${COMPILER_PATH}/../arm-linux-androideabi/lib/armv7-a")