此代码使用-std = c ++ 11编译g ++。在 exerciseBug (重新抛出后)中,当 libunwind 链接到静态程序崩溃时,与g ++链接。 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)