Этот код компилируется с g ++ с использованием -std = c ++ 11. Связывание с 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)
Задача ещё не решена.
Других решений пока нет …