我在我的测试应用中使用了一些LLVM静态库和boost :: program_options。问题是使用LLVM库的源代码应该使用-fno-rtti
编译(llvm-config -cxxflags
在输出中返回
$ ./llvm-config --cxxflags
-I/Users/user/Documents/dev/src/llvm/installed_local/include -DNDEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fno-common -Woverloaded-virtual -Wcast-qual
)但是boost :: program_options需要通过boost::any
进行RTTI:
/softdev/boost-1.56/include/boost/any.hpp:149:48: error: cannot use typeid with -fno-rtti
return content ? content->type() : typeid(void);
为我的应用编译cmd:
clang++ `${LLVM_BIN}/llvm-config --cxxflags` -I${LLVM_INCLUDE} -I${CLANG_INCLUDE} -I/softdev/boost-1.56/include -c ./lib_linker.cpp -o ./lib_linker_x86_64.o
我应该怎么做才能编译我的应用程序?
PS。异常的相同问题 - LLVM关闭了-fno-exceptions
的异常,但program_options需要它们:
/softdev/boost-1.56/include/boost/program_options/value_semantic.hpp:355:20: error: cannot use typeid with -fno-rtti
return typeid(T);
答案 0 :(得分:1)
您需要使用RTTI重新编译LLVM并启用例外。