2

此代码使用 -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)

4

0 回答 0