MinGW: соединение с LAPACK и BLAS приводит к тому, что исключения C ++ становятся необработанными - PullRequest
2 голосов
/ 27 декабря 2011

Ситуация простая, но странная.Когда я компилирую свою программу без источника LinearAlgebra.o (который требует ссылки на LAPACK), исключения C ++ перехватываются и обрабатываются.Когда я не включаю этот модуль компиляции, но все еще делаю ссылку на библиотеки (-llapack -lblas), исключения перехватываются и обрабатываются.Но как только я получаю его там (код из него работает нормально), исключения C ++ перестают обрабатываться правильно, и я получаю обработчик сбоя Windows «Программа перестала отвечать на отчет обратно в HQ».

Здесь Я пролил свет на то, что происходит внутри этого исходного файла.Я держал это довольно простым, но я не уверен, является ли это действительно Кошерным.

Я подозреваю, что речь идет о вызове подпрограмм FORTRAN, из-за которых исключения C ++ перестают работать.Но я понятия не имею, как это исправить.

ОБНОВЛЕНИЕ:

Я очень рад, что нашел временное решение этой проблемы: я использую компилятор MinGW gfortran для прямой компиляции подпрограмм LAPACK и BLAS, которые я сейчас использую.

Связывание этих объектных файлов в моем проекте C ++ с использованием -lgfortran с g++ работает безупречно, и мои исключения по-прежнему обрабатываются правильно!В качестве бонуса это позволяет мне включать только те подпрограммы LAPACK, которые я намереваюсь использовать, так что теперь мне больше не нужно связывать библиотеку ~ 4 МБ.

Редактировать: я думаю, что если я статически связываю библиотеку, она только «захватывает»то, что ему нужно ", так что это 4MB не имеет значения в этом случае.

1 Ответ

0 голосов
/ 30 декабря 2011

У меня были отличные результаты с GotoBLAS2.Запуск включенного скрипта приводит к созданию массивной статической библиотеки размером 19 МБ, оптимизированной для моей машины.Это работает безупречно, просто связывая это.Все мои звонки в стиле фортран просто работают.

...