【发布时间】:2012-03-03 11:18:04
【问题描述】:
我正在尝试将 llvm 用作我的软件的代码生成后端,并且刚刚意识到 llvm 是在不支持 C++ 异常处理的情况下编译的(为了提高效率)。然而,在我的软件中,我广泛使用异常处理。
如果我将所有回调函数包装在 try-catch-blocks 中(这样就不需要“通过”llvm 代码传播异常),那么我是否可以安全地删除“-fno-exceptions”(对于 GCC)我的链接器标志? (与 llvm 链接时通常需要此标志,因为它在执行 llvm-config --cxxflags 时会出现)。
如果不是,如果我用“throws()”声明的函数包装 llvm 函数,情况会改变吗?这些函数的实现可以用-fno-exceptions编译。
【问题讨论】:
-
我不会赌 ABI 的兼容性,但谁知道呢?在启用异常的情况下自己编译 LLVM 可能更容易、更安全。
-
@delnan 编译 llvm 不是一种选择。我的软件被不同平台(linux、mac、windows)上的几个人使用,我需要依赖您获得的默认 llvm 安装,例如来自 apt-get。
-
@delnan:我对 ABI 兼容性不太了解,但是如果函数是用 throws() 声明的,我会明白吗?我相应地修改了问题。
-
AFAIK,大多数 Linux 发行版中的 LLVM 包都是用异常和 RTTI 构建的。
-
@arrowdodger 至少在 Ubuntu 10.4 上,情况并非如此