Связывание библиотеки размотки статически приводит к дампу ядра

Этот код компилируется с g ++ с использованием -std= C++ 11. Связывание с g ++, когда libunwind связан в статически сбоях программы после перехвата в exercBug (после повторного выброса). 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)

0 ответов

Другие вопросы по тегам