2

我一直在尝试编译一段需要 boost logging 的代码,当我尝试使用 gnustl 编译时一切都很好,但是当我切换到 stlport 编译器时,会出现以下消息。

In file included from   /boost/include/boost/log/attributes/attribute_value.hpp:23:0,
                 from /boost/include/boost/log/attributes/attribute_value_set.hpp:27,
                 from  /boost/include/boost/log/core/record.hpp:21,
                 from  /boost/include/boost/log/core/core.hpp:23,
                 from  /boost/include/boost/log/core.hpp:20,
                 from  /boost/include/boost/log/common.hpp:22,
                 from /MyApp/FrameWorkLog.cpp:30:
 /boost/include/boost/log/utility/type_info_wrapper.hpp: In member function 'std::string boost::log::v2s_mt_posix::type_info_wrapper::pretty_name() const':
 /boost/include/boost/log/utility/type_info_wrapper.hpp:131:33: error: '__cxa_demangle' is not a member of 'abi'

出于多种原因,我不想使用 gnustl。

更多信息:以下是我的 Application.mk 文件配置

NDK_TOOLCHAIN_VERSION=4.6
APP_ABI := armeabi-v7a
APP_PLATFORM := android-14
APP_STL := stlport_static  # For Static build
APP_CPPFLAGS := -frtti -fexceptions  

升压库版本:1.54.0

我尝试构建我的应用程序 9c 和 10b android ndk,但没有区别。

4

1 回答 1

3

/boost/include/boost/log/utility/type_info_wrapper.hpp:131:33:错误:“__cxa_demangle”不是“abi​​”的成员

查看 NDK 的doc/CPLUSPLUS-SUPPORT.html,没有提到它。看起来你有四个选择。

首先,您可能可以使用Boost 1.56,因为它似乎type_info_wrapper.hpp不使用__cxa_demangle. 我可能是错的,但我没有在 1.56 标头中找到它。

其次,配置BOOST_LOG_HAS_CXXABI_H未定义的Boost 1.54 。这将保护abi::__cxa_demangle1.54 中的type_info_wrapper.hpp.

我不知道该怎么做,因为我很少使用 Boost,但我可能会config.hpp按如下方式破解它。Boost 的人可能知道一个bjam配置选项,所以希望他们中的一个能提供反馈。

// cxxabi.h availability macro
#if defined(BOOST_CLANG)
#   if defined(__has_include) && __has_include(<cxxabi.h>)
#       define BOOST_LOG_HAS_CXXABI_H
#   endif
#elif defined(__GNUC__) && !defined(__QNX__)
#   define BOOST_LOG_HAS_CXXABI_H
#endif

// Add these lines as a hack
#ifdef (__ANDROID__)
# undef BOOST_LOG_HAS_CXXABI_H
#endif

第三,尝试与提供它的库之一链接。不幸的是,它看起来不像 STLport 提供它。看来 GAbi++ 和 GNU STL 提供了它:

$ cd /opt/android-ndk-r9/
$ find . -iname cxxabi.h
./sources/cxx-stl/gabi++/include/cxxabi.h
./sources/cxx-stl/gnu-libstdc++/4.4.3/include/cxxabi.h
./sources/cxx-stl/gnu-libstdc++/4.6/include/cxxabi.h
./sources/cxx-stl/gnu-libstdc++/4.7/include/cxxabi.h
./sources/cxx-stl/gnu-libstdc++/4.8/include/cxxabi.h

第四,__cxa_demangle从提供它的 STL 库之一移植。您可以在Android 工具项目中找到 NDK 库的源代码。

于 2014-09-14T18:21:44.873 回答