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

StackOverflow https://stackoverflow.com/questions/413473

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

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

scroll top