Исключение C ++ не обнаружено (проект Qt) - PullRequest
2 голосов
/ 18 января 2012

Моя проблема заключается в следующем:

Существует общая библиотека Interface.so, основанная на ICE (Internet Communication Engine) и нечто вроде оболочки для часто повторяющихся задач. Одна из этих задач - зарегистрироваться в теме (аналогично идентификатору). В случае, если эта тема еще не существует, ICE выдает исключение с именем NoSuchTopic.

Если я использую Interface.so с автономным приложением Qt, я могу перехватить исключение NoSuchTopic и создать тему в блоке catch (блок catch находится в Interface.so). Но я хочу сделать то же самое в плагине для симулятора полета, который сам по себе является общим объектом - и здесь исключение не перехватывается предыдущим упомянутым блоком перехвата в Interface.so. Вместо этого вылетает симулятор полета с указанием

 terminate called after throwing an instance of 'IceStorm::NoSuchTopic' 

nm -C -D говорит, что «IceStorm :: NoSuchTopic» не определен в Interface.so. Это нормально? Или должна быть ссылка, где найти определение? Я уже добавил запись для libIceStorm.so (libs + = -lIceStorm), где определяется IceStorm :: NoSuchTopic (в соответствии с nm), но это ничего не меняет!

Я также пробовал '-Wl, -E', но не знаю, правильно ли я установил эту опцию в Qt Creator. Поможет ли это вообще?

Буду благодарен за каждый намек.

Ответы [ 2 ]

1 голос
/ 18 января 2012

Когда я сталкивался с этой проблемой раньше, обычно это связано с тем, что информация о типе недоступна.

Часто можно перехватить исключение с помощью блока try {} catch (...) {}, так как он перехватывает исключения, даже если информация о типе отсутствует, но это не особенно полезно!

Это часто проблема, если в общей библиотеке скрыты символы, см. статью GCC Visibility , особенно "Проблемы с исключениями C ++ (пожалуйста,read!) "section.

В этом вопросе рекомендуется использовать дополнительные флаги.

Иногда чистая перестройка исправляет ошибки, если что-то строится на старой версиибиблиотеки.Если чистая перестройка устраняет проблему, проверьте правильность сценария сборки.

0 голосов
/ 01 июня 2015

Звучит так, как в предыдущей версии использовался флаг "без исключений" при сборке из исходного кода. Это добавляет много времени на сборку, поэтому многие люди от нее отказываются.

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