2011-12-27 3 views
2

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

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

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

UPDATE:

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

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

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

+1

Обычно код fortran должен быть скомпилирован с использованием front-end 'gfortran'. Он добавляет соответствующие флагов компилятору, что с помощью 'gcc' и функции автообнаружения языка нет. Вы можете проверить точные аргументы, используемые в компиляции компиляции с расширенным параметром '-v'. – rodrigo

ответ

0

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