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

8
我正在尝试使用CMake将我们的C++代码库交叉编译到Android平台,使用的是Ubuntu 10.10上的r5b NDK。编译阶段成功,但在.so的最终链接阶段中,有许多未解析的符号引用libsupc++.a文件中的符号(我指定链接)。我还尝试了-lsupc++,但没有任何区别。
我试图尽可能地按照官方ndk-build系统生成的命令行来构建test-gnustl-1 NDK测试应用程序。
在arm-linux-androideabi-nm工具上运行arm-linux-androideabi/lib/libsupc++.a文件,显示错误输出中定义的符号被引用。
一个在libsupc++中定义但找不到的示例符号是:__gxx_personality_v0
这是我的样本链接行和结果错误的样本。
`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++" 在使用外部构建工具时使用。
我已经想尽了办法来解决这个链接问题,尝试重新排列链接行的顺序。我知道链接过程通常是一个棘手的过程。非常感谢任何帮助。
1个回答

6
事实证明,我需要将-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"子句中。
希望这也能帮助其他人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接