此代码使用 -std=c++11 使用 g++ 编译。与 g++ 链接时,当libunwind被静态链接时,在捕捉到exerciseBug后(重新抛出后)程序崩溃。导致崩溃的 LDFLAGS:
-Wl,-Bstatic -lunwind -Wl,-Bdynamic -llzma
当libunwind动态链接时,代码正常工作。导致正常运行的 LDFLAGS:
-Wl,-Bstatic -Wl,-Bdynamic -lunwind -llzma
#include <iostream>
using namespace std;
void exerciseBug()
{
try {
throw exception();
} catch (exception &err) {
cerr << "caught in exerciseBug\n";
throw;
}
}
int main()
{
try {
exerciseBug();
} catch (exception &err) {
cerr << "caught in main\n";
::exit(0);
}
}
问题是为什么 libunwind 需要动态链接? (在 Ubuntu 16.04 上运行;g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609)