Android上的库生成错误
在两天多的建筑错误之后,我放弃了 我在这里遵循了这个很好的教程:。 它进行编译,“cryptest.exe”通过了所有测试。所以,我想静态库“libcryptopp.a”是可以的 因此,我移动了“libcryptopp.a”和Android项目中的所有头文件 但在构建步骤中(通常是…:-)会出现编译错误,如:Android上的库生成错误,android,build,crypto++,Android,Build,Crypto++,在两天多的建筑错误之后,我放弃了 我在这里遵循了这个很好的教程:。 它进行编译,“cryptest.exe”通过了所有测试。所以,我想静态库“libcryptopp.a”是可以的 因此,我移动了“libcryptopp.a”和Android项目中的所有头文件 但在构建步骤中(通常是…:-)会出现编译错误,如: .../Classes/libs/android/libcryptopp.a(files.o): in function std::basic_filebuf<char, s
.../Classes/libs/android/libcryptopp.a(files.o): in function std::basic_filebuf<char, std::char_traits<char> >::_M_unshift()
[clone .part.40]:/Users/toto/Developer/NDKs/AndroidNDKs/android-ndk-r8e/sources/cxx-stl/stlport/stlport/stl/_fstream.h:322:
error: undefined reference to 'std::_Filebuf_base::_M_write(char*, int)'
and ~50 others ...
在尝试使用“APP\u STL:=stlport\u static/dynamic”、“APP\u STL:=gnustl\u static/dynamic”等之后。。。没有机会了
作为一名真正的建筑/编译专家(在Android上更糟),有人能帮我吗。
多谢各位 好的。它正在工作
因此,“libcryptopp.a”的链接在我的Android项目中不适用于“stlport”,而只适用于“gnustl_static”。也许是因为其他的原因,比如“cocosd2-x”
因此,在tuto“”之后,必须更改脚本“setenv android.sh”以获得如下结果:
ANDROID_STL_INC: /Users/toto/Developer/NDKs/AndroidNDKs/android-ndk-r8e/sources/cxx-stl/gnu-libstdc++/4.6/include/
ANDROID_STL_LIB: /Users/toto/Developer/NDKs/AndroidNDKs/android-ndk-r8e/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/libgnustl_static.a
并移动文件(仅用于编译)
在
否则就会出现编译问题
哎哟 我认为你的答案有几个问题 首先,当多个库使用标准运行时,必须使用共享对象版本,而不是静态版本。这在ANDROID\u NDK\u ROOT/docs/CPLUSPLUS-SUPPORT.html中有介绍 其次,您可能对库加载顺序有问题。静态链接使之消失,因为对
std::\u Filebuf\u base::\u M_write(char*,int)
(和friends)的引用在编译时解析,而不是在链接/加载时解析。要解决此问题,必须先加载libstlport\u shared.so
(或libgnustl\u shared.so
),然后再加载libcryptopp.so
如果先加载libcryptopp.so,则进程中没有加载运行时来解析std::_Filebuf_base::_M_write(char*,int)
(和friends)。wiki页面中包含了LD_PRELOAD
技巧
要在Android Java中修复它,您需要执行以下操作。有关详细信息,请参阅
static {
System.loadLibrary("stlport_shared");
System.loadLibrary("cryptopp");
}
Crypto+++Andrid wiki页面已更新:。是。它使用的是静态版本,但这不是正确的方法。谢谢你更新了维基。
/Users/toto/Developer/NDKs/AndroidNDKs/android-ndk-r8e/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include/bits
/Users/toto/Developer/NDKs/AndroidNDKs/android-ndk-r8e/sources/cxx-stl/gnu-libstdc++/4.6/include/bits
static {
System.loadLibrary("stlport_shared");
System.loadLibrary("cryptopp");
}