android-ndk - Android NDK r5b 外部构建和supc++链接问题

标签 android-ndk android-ndk-r5

我正在尝试使用 Ubuntu 10.10 上的 r5b NDK 为 Android 平台交叉编译我们的 C++ 代码库(使用 CMake)。编译阶段成功,但是在 .so 的最终链接阶段,对 libsupc++.a 文件(我指定要链接的文件)中的符号有许多未解析的引用。我也试过 -lsupc++ 没有区别。

在构建 test-gnuSTL-1 NDK 测试应用程序时,我尝试尽可能地遵循官方 ndk-build 系统生成的命令行。

在 arm-linux-androideabi/lib/libsupc++.a 文件上运行 arm-linux-androideabi-nm 工具会显示错误输出中引用的定义 (T) 符号。

在 libsupc++ 中找不到的符号示例是:__gxx_personality_v0
这是我的示例链接行和由此产生的错误示例。
/home/user/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-g++ -fPIC -Wall -Wextra -Wno-unused -Wno-multichar -fno-rtti -MMD -MP -MF -ffunction-sections -fexceptions -funwind-tables -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -Wa,--noexecstack -DANDROID -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -O0 -DDEBUG -D_DEBUG -g --sysroot=/home/user/android-ndk-r5b/platforms/android-9/arch-arm -Wl,--gc-sections -Wl,-z,nocopyreloc -Wl,--no-undefined,-z,noexecstack -L/home/user/android-ndk-r5b/platforms/android-9/arch-arm/usr/lib -L/home/user/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/arm-linux-androideabi/lib -Wl,-rpath-link=/home/user/android-ndk-r5b/platforms/android-9/arch-arm/usr/lib /home/user/android-ndk-r5b/sources/cxx-stl/gnu-libstdc++/libs/armeabi/libstdc++.a -lc -lsupc++ -shared -o ../../lib/Debug/libFoo.so CMakeFiles/Foo.dir/Foo.c.o CMakeFiles/Foo.dir/Bar.cpp.o CMakeFiles/Foo.dir/Baz.cpp.o

`CMakeFiles/Foo.dir/Foo.cpp.o: In function 'myFunc':
/home/user/myroj/src/native/modules/libFoo/Foo.cpp:292: undefined reference to '__cxa_end_cleanup'
CMakeFiles/Foo.dir/Foo.cpp.o:(.ARM.extab.text.myFunc+0x0): undefined reference to '__gxx_personality_v0'
...
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/vector.tcc:350: undefined reference to '__cxa_begin_catch'
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/vector.tcc:357: undefined reference to '__cxa_rethrow'
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/stl_vector.h:1153: undefined reference to 'std::__throw_length_error(char const*)'
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/stl_tree.h:199: undefined reference to 'std::_Rb_tree_decrement(std::_Rb_tree_node_base*)'
...

我试图创建一个简单的 hello-world 应用程序,它在一个简单的 .a 文件中使用异常和链接。在我直接链接 libsupc++.a 库而不是使用“-lsupc++”之前,我遇到了相同的错误。但是,这种相同的技术不适用于较大的项目链接步骤。 NDK 文档还建议在使用外部构建工具时应使用“-lsupc++”。

我对如何解决此链接问题一无所知。我已经尝试以我能想到的多种方式重新排序链接线。我知道链接通常是一个变化无常的过程。
任何帮助是极大的赞赏。

最佳答案

原来我需要添加 -L/home/user/android-ndk-r5b/sources/cxx-stl/gnu-libstdc++/libs/armeabi"到路径并显式链接“/home/user/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/arm-linux-androideabi/lib/thumb/libsupc++.a”与包含在“--start-group --end-group”子句中的所有包含库。

希望这对其他人也有帮助。

关于android-ndk - Android NDK r5b 外部构建和supc++链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6224163/

相关文章:

android - 保留在 "Trying to load lib"中,永远不返回

c++ - mips64el-linux-android-g++ : error: unrecognized command line option '-mfpu=neon'

Android NDK : clang toolchain with Android Studio 2. 2、gradle、externalNativeBuild + Android.mk

android - 随机使用应用程序时出现 ANR

java - 我已经在 Windows 8 中设置了 ndk-build 的路径,但路径中仍然出现错误?

android - 纹理不会出现使用 native 代码在 android 上使用 opengl es 加载它

Eclipse for Android NDK 中的 C++ static const 多重声明错误

android - Android 2.3 插件开发

android - 尝试使用 Cygwin 在 Windows 上使用 NDK 构建适用于 Android 的 PocketSphinx 时出现问题