我试图移植一个C++实用程序,我想从Android的ADB外壳程序运行。 为此,我使用Android NDK的make-standalone-toolchain.sh脚本,并使用它编译我的程序。 不幸的是,当我尝试运行它,我得到这个错误:在Android的adb外壳程序本地程序中使用stl
reloc_library[1315]: 16304 cannot locate '_ZNKSs5c_strEv'...
CANNOT LINK EXECUTABLE
经过一番研究,我看到这意味着c_str函数不存在的libstdC++所以在NDK。我也无法在stlport.so中找到符号,实际上只能在./sources/cxx-stl/gnu-libstdc++/libs/版本的C++库中找到它。这些库不包含在我制作的独立工具链中,而且我也无法在设备上找到它们(设备正在运行Honeycomb)。
NDK中的文本明确指出,当我使用stlport时,支持整个STL。这是冰淇淋三明治中唯一真实的东西吗? libstlport.so或libsupC++。如此在设备和NDK上没有任何签名,如没有找到的签名。
所以我的问题有两个部分:
- 有我丢失的东西在构建过程中/ Android的设置?我可以设置不同的东西,以便程序可以在不需要gnu-libstC++的情况下进行编译,或者至少在编译/链接错误时失败,而不是无法在设备上加载?
- 如果与gnu-libstC++链接是唯一的方法,我该怎么做?我认为我可以管理静态链接,但我宁愿不。
我怎样才能经GNU的libstdC++版本添加到我的
要选择不同的STL实现(如静态stlport或静态gnustl),请在Application.mk文件(阅读文档/ CPLUSPLUS-SUPPORT.html文件)中使用APP_STL变量。 – 2012-02-06 18:17:54
不幸的是,我不能这样做,因为我使用了独立的工具链,并且通常我不编译活动,而是计划在adb外壳上运行的Linux程序(类似于ps或cp) – nitzanms 2012-02-07 12:56:31
然后检查ndk-build如何选择STL实现(它选择特定的CFLAGS和LDFLAGS)。为独立工具链选择相同的编译器和链接器标志,您将能够选择静态STL库。 – 2012-02-07 19:06:00