Ситуация такова, что у меня есть динамическая библиотека, написанная на C ++, которая обернута для Python другой динамической библиотекой, также написанной на C ++ (генерируемой SIP, если быть точным). Первая динамическая библиотека определяет функцию do_raise
, которая выдает исключение RaiserError
, подкласс std::exception
. Вторая динамическая библиотека в оболочке do_raise
пытается перехватить RaiserError
, чтобы перевести ее в исключение Python.
Сборка с Visual C ++, все работает как положено, и RaiserError
перехватывается правильно. Однако при использовании g ++ в Linux RaiserError
не перехватывается. Если я попытаюсь поймать std::exception
(базовый класс RaiserError
), это сработает. Что здесь не так? У двух библиотек разные понятия типа RaiserError
, поскольку он не распознается блоком catch?
Для тестирования я также пишу небольшой исполняемый файл, который вызывает do_raise
в библиотеке C ++, и здесь я могу поймать RaiserError
даже с g ++.