Исключения не пойманы в программе GCC

Мой проект содержит совместно использованную библиотеку и exe клиент. Я нашел, что мой собственный класс исключений, брошенный из библиотеки, не пойман клиентским блоком выгоды, и программа завершается с "оконечным названный после броска экземпляра..." сообщения. Продолжая играть с проектом, я нашел, что любое исключение любого типа не поймано. Например, эта выгода не работает:

    try
    {
        m_pSerialPort = new boost::asio::serial_port(m_IoService, "non-existing-port");
    }
    catch(const boost::system::system_error& e)
    {
        // ...
    }

Сообщение об ошибке:

terminate called after throwing an instance of 
'boost::exception_detail::clone_impl
<boost::exception_detail::error_info_injector
<boost::system::system_error> >'
  what():  No such file or directory

Версия GCC 4.4.1, Linux ОС. Тот же код работает успешно в Windows, MSVC. Какая причина может предотвратить программу GCC для ловли исключений правильно?

6
задан Alex F 11 March 2010 в 13:01
поделиться

1 ответ

И клиентский .exe, и разделяемая библиотека должны быть связаны с libgcc, чтобы они не выходили за границы разделяемой библиотеки. Согласно руководству GCC:

... если библиотека или основной исполняемый файл должны генерировать или перехватывать исключения, вы должны связать их с помощью драйвера G ++ или GCJ, в зависимости от языков, используемых в программе, или с помощью параметра -shared-libgcc, чтобы он был связан с общим libgcc.

9
ответ дан 10 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: