У меня были похожие проблемы.
Я использовал QT на Mac OSX 10.8 (Mountain Lion), используя gcc47 (macports).Внутри QT main я вызвал метод из разделяемой библиотеки, который выдал исключение, определенное в этой разделяемой библиотеке.Независимо от того, какой тип try-catch я поместил вокруг вызова метода (перехват исключения, перехват базы или даже перехват (…)), всегда вызывался обработчик завершения, что приводило к прерыванию моей программы.Было невозможно поймать исключение.
Сначала я попробовал опцию -shared-libgcc во время компоновки.В противном случае это не было проблемой, предложение catch (…) сработало бы.
Затем я написал простой main без QT, используя рукописные make-файлы, связанные с общей библиотекой.И это сработало!
Я пришел к выводу, что проблема была вызвана различием опций, которые были переданы в gcc (то есть разницей между make-файлом, сгенерированным QT / qmake, и моим рукописным).
После некоторого бинарного поиска я обнаружил, что следующие проблемы вызывают мои проблемы (при соединении):
-mmacosx-version-min=10.5
После изменения на следующее:
-mmacosx-version-min=10.6,
все работало, как и ожидалось.
Я не знаю, почему указание опции для 10.6 решает проблему.Есть мысли по этому поводу?