Проблема компиляции C ++ в AIX 1.7 - PullRequest
1 голос
/ 26 декабря 2011

У меня странная проблема при компиляции простой программы на C ++, которая выдает исключение.

main.cc:

#include <stdio.h>
double mean(double a, double b)
{
    if((a + b) == 0)
    {
        throw "Exception:: Numerator is Zero";
    }
    return (a+b) / 2;`
}

calc.cc:

#include <stdio.h>
double mean(double a, double b)
{
    if((a + b) == 0)
    {
        throw "Exception:: Numerator is Zero";
    }
    return (a+b) / 2;
}

Когда я скомпилирую, как показано ниже:

Execute the following commands :
Step 2.1 => gcc -maix64 -fpic -c calc.cc
Step 2.2 => gcc -maix64 -shared -o libcalc.so calc.o -lstdc++
Step 2.3 => gcc -maix64 main.cc libcalc.so -lstdc++

И запустить программу, Программа вылетает со следующей ошибкой:

terminate called after throwing an instance of 'char const*'
IOT/Abort trap (core dumped)

Но вместо шага 2.3, если мы используем следующие команды, все работает как положено:

gcc -maix64 main.cc libcalc.so -lstdc++ -lgcc_s

Не могли бы вы помочь решить эту проблему ...

1 Ответ

0 голосов
/ 30 апреля 2012

Думаю, вы дали ответ на вопрос.Этот вопрос помог мне решить аналогичную проблему.У нас есть конкретный двоичный файл C, который был связан с общим объектом, скомпилированным с g ++ и способным генерировать исключения.Исключения всегда фиксируются в библиотеке.Чтобы связать это в AIX, вы должны указать все зависимые библиотеки в строке ссылок.Поэтому я добавил -lstdc ++.Это позволило скомпилировать все, но тесты во время выполнения зависали, как только в общем объекте было сгенерировано исключение.Добавление -lgcc_s исправило это, потому что в gcc_s находится весь код обработки исключений.

Как прокомментировал Стив С, альтернативой является просто скомпилировать файл .c с помощью g ++, а затем все это обрабатывается.Наша система сборки всегда вызывает gcc для файлов .c, и мне было больно менять, поэтому я просто добавил -lstdc ++ и -lgcc_s, и все работает, включая все тесты времени выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...