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

Linking with code that does not support exception handling (C++/LLVM)

本文关键字:LLVM 链接 C++ 不支持 异常处理 代码      更新时间:2023-10-16

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

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

如果没有,如果我用用"throws()"声明的函数包装llvm函数,情况会改变吗?这些函数的实现可以使用-fno异常进行编译。

如果我将所有回调函数封装在try-catch块中(这样就不需要"通过"llvm代码传播异常),那么我可以安全地从链接器标志中删除"-fno异常"(对于GCC)吗?

是的,假设您有一种合适的方法来报告导致抛出异常的任何条件。

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

但是考虑添加-fexceptions而不是删除-fno-exceptions:以与GCC完全相同的方式解析命令行选项是复杂的,您没有必要尝试这样做