将已启用例外的已编译库链接到已禁用例外的项目

时间:2018-08-08 20:16:20

标签: c++ exception exception-handling c++14

我有一个项目被编译到库(静态.lib或动态.dll)中,该库在启用C ++异常的情况下进行编译。 然后我有另一个单独的项目,我无法控制,禁用了异常,并且该项目链接到启用了异常的库(并且显然使用了它所链接的库中的类和函数)。 / p>

要澄清:

  • 库(静态或动态,例如.lib文件):编译时启用了异常(C ++编译器标志)。该库可以抛出但可以捕获其所有异常,因此我可以做到这一点,以便它不会将任何异常泄漏到“外部”
  • 项目:它具有通过编译器标志禁用的异常,我无法更改此设置。该项目链接到上面的库。

这是受支持的方案,还是导致未定义的行为或类似的结果? 假设在.lib中,我捕获了所有可能发生的异常并进行了处理,并且没有任何异常被“泄漏”或扔出.lib回到没有启用异常的项目中。

这是否有效取决于平台(Win / Linux / macOS等)还是编译器(MSVC / clang / gcc)? 是否取决于是将库创建为静态库还是将其链接为动态库?

如果有关系,这些项目将以C ++ 14模式编译。

This question有点相关,它基本上说“不允许异常在两段代码之间传播”(除非它们具有完全相同的编译器标志)。但这并不能具体回答我的问题,也就是说,鉴于我捕获了所有异常(理论上,任何异常都不应跨越边界),将启用了异常的库链接到禁用了异常的项目。

0 个答案:

没有答案