在编译时结合fno-rtti lib和rtti lib?

时间:2014-10-14 07:26:42

标签: c++ boost llvm rtti

我在我的测试应用中使用了一些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);

1 个答案:

答案 0 :(得分:1)

您需要使用RTTI重新编译LLVM并启用例外。