Я использую компилятор AIX 7.1 и gcc 8.3.Я вижу, что выброшенное исключение не перехватывается, если я строю с флагом -Wl, -G.В приведенном ниже коде, если я не использую флаг -Wl, -G, я вижу «catch int».С этим флагом, программные ядра.
void foo()
{
try {
throw 1;
} catch(int&) {
std::cout << “catch int” << std::endl;
}
}
int main()
{
foo();
}
Я предполагаю, что обработка исключений по умолчанию отключена и должна быть включена каким-либо флагом компилятора.Кто-нибудь еще имеет опыт с этим?Обратите внимание, что это относится к платформе AIX.
Вот как я строю.Весь код находится в 1 файле.
bare-08 $ g ++ -Wl, -G 1.cc
bare-08 $ ./a.out
завершение вызовапосле создания экземпляра 'int' ловушки IOT / Abort (ядро сброшено)
bare-08 $ g ++ -Wl, -G -lsupc ++ 1.cc
bare-08 $ ./a.out
terminate вызывается после броска экземпляра 'int', который вызывается рекурсивно, прерывается IOT / Abort (ядро сброшено)
Без опции -G я получаю ошибку компоновки, показанную ниже (не вИгрушечная программа выше, но в моем реальном коде).
ld: 0711-317 ОШИБКА: неопределенный символ: .std :: basic_istream> :: seekg (long long, std :: _ Ios_Seekdir) ld: 0711-317ОШИБКА: неопределенный символ: .sqrtf ld: 0711-317 ОШИБКА: неопределенный символ: std :: basic_streambuf> :: seekoff (long long, std :: _ Ios_Seekdir, std :: _ Ios_Openmode)
Кто-нибудь видел это?Я нахожусь в трудном положении.Используйте опцию -G, чтобы избавиться от вышеуказанной ошибки компоновки, но с этой опцией обработка исключений в C ++ не работает.