Arpack(++) на окнах
Я пытаюсь заставить Arpack и Arpack++ работать в Windows 7 с Visual Studio 2010 и использую swig для создания интерфейса, который можно использовать с C#. Это в основном для создания эталона, по которому я буду измерять все дальнейшие попытки решения проблем собственных векторов с C#, но сначала мне нужно, чтобы это работало.
Мне удалось скомпилировать Arpack, используя это руководство, хотя и с небольшими изменениями, поскольку g77 больше не является компилятором Fortran, поставляемым с MinGW, вместо этого мы получаем gfortran. Дальнейшие изменения в ARmake.inc
включены комментирование -cg89
вариант, который выдал ошибку (я не знаю, для какой цели это заполнено g77, но gfortran не принимает его).
Далее, следуя руководству, подумайте: "По крайней мере, он составлен сейчас, с опцией или без нее". Я продолжал dllwrap
, Тем не менее -lg2c
опция не была принята, так как файл библиотеки libg2c
не входит в более новую версию MinGW. Если я попытаюсь без опции, я получаю ошибки о неопределенных ссылках от некоторых из моих .o
и соответствующий .f
-файлы. Какие библиотечные файлы мне следует использовать? Я делаю что-то еще явно неправильно?
1 ответ
Я нашел ключ, кажется, использовать gfortran
вместо dllwrap
, Вот весь процесс, который я использовал после установки MinGW и msys.
1) Запустите скрипт post install и убедитесь, что он не жалуется на отсутствие gcc и т. Д. Если это так, установите эти пакеты.
msys\1.0\postinstall\pi.bat
2) Извлеките файлы ARPACK и патч в msys\1.0\home\yourname\ARPACK
3) Редактировать ARmake.inc
и изменить FC
а также FFLAGS
линии к:
FC = gfortran
#FFLAGS = -O -cg89
4) Редактировать UTIL/second.f
и заменить все этим. Это предотвращает ошибку об ETIME. Не уверен, что он делает, но это предлагается http://blog.csdn.net/guillotine007/article/details/8636647
SUBROUTINE SECOND( T )
REAL T
CALL CPU_TIME(T)
RETURN
END
5) Компилировать в.o файлы
make lib
6) Используйте gfortran вместо dllwrap, чтобы связать и создать dll
gfortran -shared BLAS/*.o LAPACK/*.o SRC/*.o UTIL/*.o -o arpack_win32.dll
7) Полученная DLL зависит от 3 других библиотек: libgcc_s_dw2-1.dll
, libgfortran-3.dll
, libquadmath-0.dll
который вы можете получить из установки MinGW.