STLport错误:' __ cxa_demangle'不是' abi'的成员用于升级库

时间:2014-09-14 18:04:19

标签: c++ boost android-ndk boost-log android-stlport

我一直在尝试编译一段需要提升日志记录的代码,当我尝试使用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  

Boost库版本:1.54.0

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

1 个答案:

答案 0 :(得分: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 1.54,使BOOST_LOG_HAS_CXXABI_H 定义。这样可以防止在{1.5} type_info_wrapper.hpp中使用abi::__cxa_demangle

我不知道怎么做,因为我很少使用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

第四,来自提供它的STL库之一的端口__cxa_demangle。您可以在Android Tools Project找到NDK库的源代码。