无法在X86 Android上找到符号“_ZNSt12__node_alloc13_M_deallocateEPvj”

时间:2015-06-01 17:15:46

标签: android android-ndk crypto++

我正在使用最新的NDK和Crypto ++ 5.6.2。我按照这些说明编译了armeabi,armeabi-v7a,mips和x86 http://www.cryptopp.com/wiki/Android_(Command_Line)

我目前正在使用Crypto ++的SHA256。 我在三台设备上测试了它(arm基于android 2.355.1),它运行正常。但是当我在Genymotion(x86)和捆绑的android模拟器(x86)上尝试时,它无效。

dlopen failed: cannot locate symbol "_ZNSt12__node_alloc13_M_deallocateEPvj"

知道为什么会这样吗?

1 个答案:

答案 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...
...