我一直在尝试编译一段需要提升日志记录的代码,当我尝试使用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,但没有区别。
答案 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库的源代码。