Обработка исключений в компиляторе gcc в AIX - PullRequest
0 голосов
/ 03 апреля 2019

Я использую компилятор 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 ++ не работает.

1 Ответ

0 голосов
/ 06 апреля 2019

Не использовать опцию -G. Если вы хотите использовать какую-либо специфическую для AIX опцию, используйте -brtl:

g++ -Wl,-brtl -o AmarnathShanbhag AmarnathShanbhag.cc && ./AmarnathShanbhag
catch int
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...