【发布时间】:2017-06-24 16:11:19
【问题描述】:
我有一些库(实际上是用不同编译器编译的 tbb 库),在main() 正确启动之前抛出异常。有没有办法抓住它?
int main() { std::cout << "Hello World" << std::endl; }
给予
terminating with unexpected foreign exception
Abort (core dumped)
如果我链接到所述库(本示例中未使用,但在其他代码中将使用)。
【问题讨论】:
-
您的目标是哪个操作系统?
-
首先,在调用
main之前不可能捕获异常,除非您在调试器中运行。其次,捕获这样的异常几乎没有用,因为您的程序很可能无论如何都无法继续。最后,您确定这是抛出 C++ 异常,而不是操作系统或硬件异常吗?这些是使用相同术语的不同事物。 -
"(用不同的编译器编译)"不要这样做
-
@LightnessRacesinOrbit 提到使用不同的编译器可能是一个原因。但这实际上取决于“其他”编译器。和“当前”编译器。不幸的是,我们都不知道。
-
如果它是一个共享库,您可以将库加载推迟到
main()启动之后 - 要么不链接它并使用显式dlopen(),要么将其标记为延迟加载在您的链接器标志中。