C++;为Android构建的库使用了错误的依赖项符号

C++;为Android构建的库使用了错误的依赖项符号,android,c++,Android,C++,当我使用独立的工具链构建C++库时,它编译成功,但在运行时失败了,而非依赖的符号为依赖库: 06-03 15:16:29.554 3599 3619 D Unity : Unable to load library '/data/app/com.x.y.z.app-_VFxANKGcCeB5wdqbLmvgQ==/lib/arm/libmylib.so', native render plugin support disabled: java.lang.UnsatisfiedLinkEr

当我使用独立的工具链构建C++库时,它编译成功,但在运行时失败了,而非依赖的符号为依赖库:

06-03 15:16:29.554  3599  3619 D Unity   : Unable to load library '/data/app/com.x.y.z.app-_VFxANKGcCeB5wdqbLmvgQ==/lib/arm/libmylib.so', native render plugin support disabled: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_ZN3ndn18MemoryContentCache4Impl26getPendingInterestsForNameERKNS_4NameERSt6vectorISt10shared_ptrIKNS0_15PendingInterestEESaIS9_EE" referenced by "/data/app/com.ux.y.z.app
未混合符号是ndn::MemoryContentCache::Impl::getPendingInterestsForName(ndn::Name const&,std::vector&)

依赖库中确实缺少此符号,而是存在此符号:
\u zn3dn18MemoryContentCache4Impl26GetPendingInterestsforNameerNsT6\u ndk16vectorINS5\u 10 Shared\u ptrIKNS0\u 15 PendingInteresteens 5\u 9 Allocatoria\u EEEE
,即
ndn::MemoryContentCache::Impl::GetPendingInteresterName(ndn::Name const&,std::u ndk1::vector&)

可以看出,依赖库使用
std::u ndk1::vector
类,而我的库只使用
std::vector
进行编译

因此,问题是:

1) 什么是前缀?我相信这是NDK的std库实现,但需要更好的理解


2) 为什么我的图书馆不使用它?我尝试将
-static libstdc++
传递给
LDFLAGS
-DANDROID\u STL=c++\u static
-DANDROID\u STL=c++\u shared
,但运气不佳。如何强制我的库使用正确的符号?

我在Ubuntu 14和16之间遇到过这种情况。原因是GCC版本和运行时ABI。解释如何使用
\u GLIBCXX\u use\u CXX11\u ABI
宏控制链接器的查找内容。

谢谢!在我的例子中,我使用
--stl libc++
标志重新生成了一个工具链,这很有帮助。显然,默认情况下,它使用
gnustl