在我的 Android 应用程序中,我需要构建 websocketpp ( http://www.zaphoyd.com/websocketpp ) 和 libjingle ( https://code.google.com/p/libjingle/ ),然后我遇到了以下问题:
websocketpp 正在使用 boost 库 (www.boost.org),我可以通过以下方式构建它:
APP_STL := gnustl_static
但是当我链接 libjinge 库时,使用这个设置,我得到了错误:
undefined reference to 'std::__node_alloc::_M_deallocate(void*, unsigned int)'
如果我更改为在 Application.mk 中使用 stlport:
APP_STL := stlport_static
然后在编译websocketpp时出现错误:
fatal error: array: No such file or directory
websocketpp 包括我只能在这里找到的数组:
sources/cxx-stl/gnu-libstdc++/4.8/include/array
我无法同时链接 stlport 和 gnustl 库,因为我收到有关重复定义的错误消息。
那么如何为我的可以同时使用 tlport 和 gnustl 的项目解决这个问题呢?
[更新]
项目中肯定不能同时使用stlport和gnustl,所以只好二选一。WebRTC 正在使用 stlport,而 gnustl 在 GPL 下,因此 stlport 应该是更好的选择。
我可以通过对文件“boost/tools/build/v2/user-config.jam”进行一些更改来构建 boost 库(由 websocketpp 使用):
<compileflags>-I$(AndroidNDKRoot)/sources/cxx-stl/stlport/stlport
using stlport : android : $(AndroidNDKRoot)/sources/cxx-stl/stlport/stlport ;
并使用 stdlib=stlport-android 选项运行 bjam。
编译链接成功。但是,当我运行我的应用程序时,它会在执行 boost 库中的某些代码时崩溃。
有人在使用 stlport 在 Android 上构建和运行 boost 库有什么运气吗?