Ситуация простая, но странная.Когда я компилирую свою программу без источника LinearAlgebra.o (который требует ссылки на LAPACK), исключения C ++ перехватываются и обрабатываются.Когда я не включаю этот модуль компиляции, но все еще делаю ссылку на библиотеки (-llapack -lblas
), исключения перехватываются и обрабатываются.Но как только я получаю его там (код из него работает нормально), исключения C ++ перестают обрабатываться правильно, и я получаю обработчик сбоя Windows «Программа перестала отвечать на отчет обратно в HQ».
Здесь Я пролил свет на то, что происходит внутри этого исходного файла.Я держал это довольно простым, но я не уверен, является ли это действительно Кошерным.
Я подозреваю, что речь идет о вызове подпрограмм FORTRAN, из-за которых исключения C ++ перестают работать.Но я понятия не имею, как это исправить.
ОБНОВЛЕНИЕ:
Я очень рад, что нашел временное решение этой проблемы: я использую компилятор MinGW gfortran
для прямой компиляции подпрограмм LAPACK и BLAS, которые я сейчас использую.
Связывание этих объектных файлов в моем проекте C ++ с использованием -lgfortran
с g++
работает безупречно, и мои исключения по-прежнему обрабатываются правильно!В качестве бонуса это позволяет мне включать только те подпрограммы LAPACK, которые я намереваюсь использовать, так что теперь мне больше не нужно связывать библиотеку ~ 4 МБ.
Редактировать: я думаю, что если я статически связываю библиотеку, она только «захватывает»то, что ему нужно ", так что это 4MB не имеет значения в этом случае.