我正在使用最新的NDK和Crypto ++ 5.6.2。我按照这些说明编译了armeabi,armeabi-v7a,mips和x86 http://www.cryptopp.com/wiki/Android_(Command_Line)
我目前正在使用Crypto ++的SHA256。
我在三台设备上测试了它(arm
基于android 2.3
,5
和5.1
),它运行正常。但是当我在Genymotion(x86
)和捆绑的android模拟器(x86
)上尝试时,它无效。
dlopen failed: cannot locate symbol "_ZNSt12__node_alloc13_M_deallocateEPvj"
知道为什么会这样吗?
答案 0 :(得分:0)
dlopen failed: cannot locate symbol "_ZNSt12__node_alloc13_M_deallocateEPvj"
您可以使用c++filt
来解码/解码_ZNSt12__node_alloc13_M_deallocateEPvj
吗?此外,nm -D
是否显示符号?
这几乎看起来像一个STL节点。如果是这种情况,那么你可能不包括C ++或STL库;或者你没有按正确的顺序打电话给loadLibrary
。您需要包含并预加载libstlport_shared.so
。
维基页面甚至讨论了_ZNSt12__node_alloc11_M_allocateERj
的类似问题:
如果你链接到libstlport_shared.so和libcryptopp.so,那么你将不得不预加载libstlport_shared.so:
shell@android:/ $ cd /data/local/tmp shell@android:/data/local/tmp $ ls TestData TestVectors cryptest.exe libcryptopp.so libstlport_shared.so shell@android:/data/local/tmp $ shell@android:/data/local/tmp $ LD_LIBRARY_PATH=./; ./cryptest.exe v link_image[1936]: 5431 could not load needed library './libcryptopp.so' for './cryptest.exe' (reloc_library[1285]: 5431 cannot locate '_ZNSt12__node_alloc11_M_allocateERj'...) CANNOT LINK EXECUTABLE shell@android:/data/local/tmp $ shell@android:/data/local/tmp $ export LD_PRELOAD=`pwd`/libstlport_shared.so shell@android:/data/local/tmp $ echo $LD_PRELOAD /data/local/tmp/libstlport_shared.so shell@android:/data/local/tmp $ shell@android:/data/local/tmp $ LD_LIBRARY_PATH=./; ./cryptest.exe v Using seed: 1375005963 Testing Settings... ...