链接不支持异常处理的代码(C ++ / LLVM)

时间:2012-03-03 11:18:04

标签: c++ llvm

我正在尝试使用llvm作为我的软件的代码生成后端,并且意识到llvm是在不支持C ++异常处理(为了提高效率)的情况下编译的。但是,在我的软件中,我广泛使用异常处理。

如果我将所有回调函数包装在try-catch-blocks中(这样就不需要通过llvm代码传播任何异常),那么我可以安全地删除“-fno-exceptions”(对于GCC)我的链接器标志? (与llvm链接时通常需要此标志,因为它在执行llvm-config --cxxflags时出现。)

如果没有,如果用包含“throws()”声明的函数包装llvm函数,情况是否会改变?可以使用-fno-exceptions编译这些函数的实现。

1 个答案:

答案 0 :(得分:3)

  

如果我将所有回调函数包装在try-catch-blocks中(这样就不需要传播任何异常"通过" llvm代码),我可以安全地删除" -fno -exceptions" (对于GCC)来自我的链接器标志?

是的,假设您有适当的方式报告导致异常的任何条件。

-fexceptions是C ++的默认设置。 -fno-exceptions是C的默认值。将使用默认选项编译的C ++代码与使用默认选项编译的C代码混合在一起没有问题,因此将-fexceptions与{{-fno-exceptions混合起来不会有问题。 1}}。

但考虑添加-fexceptions而不是删除-fno-exceptions:解析命令行选项的方式与GCC完全相同,并且您无需尝试这样做。