dlopen для библиотеки со статическим членом, который вызывает исключение в конструкторе - приводит к Abort - PullRequest
3 голосов
/ 05 января 2009

Я пытаюсь загрузить динамическую библиотеку, используя функцию dlopen. Эта библиотека содержит статический объект, который вызывает исключение в своем конструкторе. У меня есть блок try-catch (...) вокруг вызова dlopen, но он не улавливает исключение, и я просто вижу напечатанное «Abort».

Как я могу поймать это исключение?

1 Ответ

5 голосов
/ 05 января 2009

Краткий ответ: Вы не можете

Думая об этом снова.
Исходные операторы верны, но вы также должны помнить, что dlopen () является функцией библиотеки C. C не поддерживает исключения. Таким образом, исключение, которое переходит от кода C ++ к C (Ваш глобальный объект обратно в код dlopen ()) также приведет к завершению приложения.

См. Здесь: Почему деструктор не вызывается по исключению?

Это ситуации, при которых создание исключения приведет к прекращению работы приложения. Ваша конкретная ситуация покрыта:

Исключение ускользает от конструктора / деструктора нелокальной статики (т. Е. Глобальной)

...