Как разобрать имя С++ в clang (или gcc)?

Я пытаюсь написать быстрый и грязный деманглер для clang. Я нашел фрагмент кода, в котором используется abi::__cxa_demangle, но я не могу понять, какой заголовок ему нужен. Очевидным выбором является ABI.h, но:

demangle.cpp:2:10: fatal error: 'ABI.h' file not found
#include <ABI.h>
         ^

Что мне нужно для использования abi::__cxa_demangle?


person Adam    schedule 12.10.2013    source источник


Ответы (2)


Включить cxxabi.h. В Ubuntu 13 этот заголовок находится в /usr/include/c++/4.x, где x — младшая версия gcc.

person Marat Dukhan    schedule 12.10.2013
comment
Это не часть моего дистрибутива Linux и не часть стандартной библиотеки llvm C++. Так что мне делать? В пути включения gcc есть cxxabi.h, но будет ли работать с clang++ -stdlib=libc++? - person Walter; 20.04.2014
comment
@Walter попробуйте #include <cxxabi.h> без добавления каких-либо специальных путей включения. Кстати, посмотрите, достаточно ли c++filt для ваших нужд. - person Adam; 20.04.2014
comment
@ Адам, это (#include <cxxabi.h>) то, что я сделал. Нет, c++filt для моих нужд мало :-(( - person Walter; 22.04.2014
comment
@ Уолтер, тогда я не знаю. Clang включает его в OSX, поэтому я не понимаю, почему он не будет доступен через какой-то пакет. Я не думаю, что вы можете предположить, что можете использовать gcc. - person Adam; 23.04.2014
comment
@Walter, у вас установлен libstdc++-4.8-dev или libc++-dev (или эквивалент в вашем дистрибутиве для вашего компилятора)? - person Massa; 04.06.2014

Включите cxxabi.h, но для clang в Ubuntu вам потребуется установить пакет libc++abi-dev.

person Chris Sherlock    schedule 06.01.2015