C++;为Android构建的库使用了错误的依赖项符号
当我使用独立的工具链构建C++库时,它编译成功,但在运行时失败了,而非依赖的符号为依赖库: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
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
?