URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1819
[ Назад ]

Исходное сообщение
"Эксепшены в либах."

Отправлено kashey , 30-Июн-03 16:18 
Всем привет.
У меня возникла проблемма - в либах не работают эксепшены, а точнее любой throw вызывает крах всей программы.
Система программы примерно такова - к исполняемому файлу статически линкуется либа, потом создается класс который в этой либе определен, он создает 2 потока и ждет команд.
Фактически компонент создан как мост между виндавсом и линухом для работы разных там служб( итого получаем сервер связи на линуксе а монитор линий на виндах).
Падать не должно. Поставил кучу проверок, но часть компонет написанны всеже с жестким использованием эксепшеном, например эмулятор виндового реестра - он в данном случае и киляет.

Читал я тут архив сего форума - там было сказано что если использовать _init\_fini эксепшены отрыбаются.
Но эти функции не используются.

компилиться вроде все правильно, по крайней мере когда код был в главной програме - он работал.
Вынес во вне - не пашет.

В чом глюк?


Содержание

Сообщения в этом обсуждении
"Эксепшены в либах."
Отправлено Max Zinal , 03-Июл-03 22:39 
>В чом глюк?

Если GCC 3.0 и выше, а линкер не GNU, беда может быть
в нововведённом в третью GCC хитро оптимизированном
C++ RTTI + линкер, сей наворот не поддерживающий.

Если GCC 2.95.3 и ниже либо линкер гнусный, тогда
без примера кода вряд ли кто-нибудь (кроме разве
знатоков астрологии) чего присоветует.


"Эксепшены в либах."
Отправлено sas , 11-Июл-03 15:37 
>Всем привет.
>У меня возникла проблемма - в либах не работают эксепшены, а точнее
>любой throw вызывает крах всей программы.
>Система программы примерно такова - к исполняемому файлу статически линкуется либа, потом
>создается класс который в этой либе определен, он создает 2 потока
>и ждет команд.
>Фактически компонент создан как мост между виндавсом и линухом для работы разных
>там служб( итого получаем сервер связи на линуксе а монитор линий
>на виндах).
>Падать не должно. Поставил кучу проверок, но часть компонет написанны всеже с
>жестким использованием эксепшеном, например эмулятор виндового реестра - он в данном
>случае и киляет.
>
>Читал я тут архив сего форума - там было сказано что если
>использовать _init\_fini эксепшены отрыбаются.
>Но эти функции не используются.
>
>компилиться вроде все правильно, по крайней мере когда код был в главной
>програме - он работал.
>Вынес во вне - не пашет.
>
>В чом глюк?

Если Вы используете несколько динамических разделяемых библиотек, то можно проверить -shared-libgcc ключ. Иногда его надо явно указать

Смотрите man gcc

Успехов
--- sas