Связывание библиотеки размотки статически приводит к дампу ядра
Этот код компилируется с 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)