2014-09-14 2 views
2

Я пытаюсь скомпилировать фрагмент кода, который требует более мощного ведения журнала, все в порядке, когда я пытаюсь скомпилировать с gnustl, но когда я переключаюсь на stlport компилятора, громкоговорители с сообщением.Ошибка STLport: '__cxa_demangle' не является членом 'abi' для библиотеки boost

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 андроид NDK, но нет никакой разницы ,

ответ

3

/boost/include/boost/log/utility/type_info_wrapper.hpp:131:33: error: '__cxa_demangle' is not a member of 'abi'

Рассматривая NDK's doc/CPLUSPLUS-SUPPORT.html, об этом не упоминается. Похоже, у вас есть четыре варианта.

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

Во-вторых, настройте Boost 1.54 таким образом, чтобы BOOST_LOG_HAS_CXXABI_H был не. Это защитит использование abi::__cxa_demangle в 1.54's 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. Оказывается Габи ++ и 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.

+0

Я не пытался увеличить уровень 1.56, надеюсь, в ближайшем будущем я бы попробовал это. Я не могу использовать gnustl, потому что мои все другие библиотеки скомпилированы с помощью stlport, поэтому в конечном итоге это приведет к проблемам при связывании. Я использовал флаг -E, чтобы узнать, какие библиотеки включены, и, оказывается, он включает /android-ndk-r10b/sources/cxx-stl//gabi++/include/cxxabi.h, но да, я просто хотите подтвердить, что gabi ++ даже не имеет __cxa_demangle, но gnu-libstdC++/4.8 и 4.6 имеет его. Но это может быть включено только тогда, когда я выбираю gnustl. –

+0

@ Абхирам Мишра - Да, я с тобой. Я тоже использую STLport. Но я не помню, чтобы проблема (пока) ... Я использую STLport по причинам лицензирования. GPL токсичен для несвободных проектов. – jww

+0

Также хочу добавить; если я выберу NDK_TOOLCHAIN_VERSION = 4.8, я получаю еще больше ошибок, а в -E, а промежуточный файл выглядит как android-ndk-r10b/sources/cxx-stl // gabi ++/include/cxxabi.h –