Ошибка STLport: «__cxa_demangle» не является членом «abi» для библиотеки наддува

Я пытался скомпилировать кусок кода, который нуждается в ускоренном ведении журнала, все хорошо, когда я пытаюсь скомпилировать с помощью 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, но без разницы.

2

Решение

/boost/include/boost/log/utility/type_info_wrapper.hpp:131:33: ошибка: «__cxa_demangle» не является членом «abi»

Глядя на НДК doc/CPLUSPLUS-SUPPORT.htmlнет никакого упоминания об этом. Похоже, у вас есть четыре варианта.

Во-первых, вы можете использовать Повышение 1,56 потому что это появляется type_info_wrapper.hpp не использует __cxa_demangle, Я мог ошибаться, но я не нашел его в заголовке 1.56.

Во-вторых, настройте Boost 1.54 таким образом, чтобы BOOST_LOG_HAS_CXXABI_H является не определены. Это будет охранять использование abi::__cxa_demangle в 1,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, которые предоставляют его. Вы можете найти исходный код для библиотек NDK по адресу Android Tools Project.

3

Другие решения