使用不支持异常处理的代码(C++/LLVM)进行链接
Linking with code that does not support exception handling (C++/LLVM)
我正在尝试使用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完全相同的方式解析命令行选项是复杂的,您没有必要尝试这样做
相关文章:
- 使用 LLVM 时出现链接器错误
- 如何链接两个LLVM位码模块?
- LLVM 传递链接问题:未定义的符号
- LLVM 通行证:破坏库未与传递库链接
- 如何使用LLVM LLD链接libstdc++
- 与LLVM LLD链接不起作用[MACOS]
- 不满意的链接错误,当使用LLVM运行javacpp预设时
- 使用CMAKE和MINGW在Windows上链接LLVM库
- 如何查看必须链接哪个 LLVM 库才能解析 PassManagerBuilder::addGlobalExtension
- LLVM:VS 2015 中的链接错误
- 无法在不使用RTTI构建LLVM的情况下链接LLVM编译器教程程序
- 链接时错误地折叠了LLVM IR类型(C++API)
- 如何使用 clang 和 llvm-link 链接库
- 在linux上链接clang/llvm库总是失败
- Apple LLVM 4.1 的 STD 链接器错误
- LLVM 教程 3.6 尝试编译第 8 章输出时的链接器错误
- 如何进行llvm链接时间优化
- 使用 LLVM 在 OSX 上将问题与 boost::p rogram_options 链接
- 使用g++与clang / LLVM链接失败
- 使用LLVM链接器生成C代码