Я пытаюсь скомпилировать Armadillo 4.300, используя MinGW для 32-битной Windows, используя LAPACK и BLAS (скомпилировано из исходного кода, загружено с http://icl.cs.utk.edu/lapack-for-windows/lapack/ )
Я использовал следующую команду cmake для генерации make-файлов:
cmake -G "MSYS Makefiles" -D CMAKE_PREFIX_PATH=/c/msys/1.0 .
Он находит liblapack.a и libblas.a, как показано ниже:
-- Found a LAPACK library: c:/msys/1.0/lib/liblapack.a
-- Found a BLAS library: c:/msys/1.0/lib/libblas.a
Я получаю следующие ошибки при запуске make
прямо из коробки:
c:/msys/1.0/lib/libblas.a(xerbla.f.obj):xerbla.f:(.text+0x70): undefined reference to `_gfortran_st_write'
c:/msys/1.0/lib/libblas.a(xerbla.f.obj):xerbla.f:(.text+0x84): undefined reference to `_gfortran_string_len_trim'
c:/msys/1.0/lib/libblas.a(xerbla.f.obj):xerbla.f:(.text+0xa4): undefined reference to `_gfortran_transfer_character_write'
c:/msys/1.0/lib/libblas.a(xerbla.f.obj):xerbla.f:(.text+0xbd): undefined reference to `_gfortran_transfer_integer_write'
c:/msys/1.0/lib/libblas.a(xerbla.f.obj):xerbla.f:(.text+0xc9): undefined reference to `_gfortran_st_write_done'
c:/msys/1.0/lib/libblas.a(xerbla.f.obj):xerbla.f:(.text+0xd8): undefined reference to `_gfortran_stop_string'
c:/tdm-gcc-64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/../../../../x86_64-w64-mingw32/bin/ld.exe: c:/msys/1.0/lib/libblas.a(xerbla.f.obj): bad reloc address 0x0 in section `.pdata'
collect2.exe: error: ld returned 1 exit status
make[2]: *** [libarmadillo.dll] Error 1
make[1]: *** [CMakeFiles/armadillo.dir/all] Error 2
make: *** [all] Error 2
Когда я добавляю -lgfortran к аргументам компоновщика в файле. \ CMakeFiles \ armadillo.dir \ build.make, это устраняет вышеуказанную зависимость от libgfortran.a, но я получаю еще одну ошибку, которую не могу устранить:
Linking CXX shared library libarmadillo.dll
c:/msys/1.0/lib/liblapack.a(sgetrf.f.obj):sgetrf.f:(.text+0x4d3): undefined reference to `strsm_'
c:/msys/1.0/lib/liblapack.a(dgetrf.f.obj):dgetrf.f:(.text+0x4d3): undefined reference to `dtrsm_'
c:/msys/1.0/lib/liblapack.a(cgetrf.f.obj):cgetrf.f:(.text+0x4d3): undefined reference to `ctrsm_'
c:/msys/1.0/lib/liblapack.a(zgetrf.f.obj):zgetrf.f:(.text+0x4cf): undefined reference to `ztrsm_'
c:/msys/1.0/lib/liblapack.a(sgetri.f.obj):sgetri.f:(.text+0x730): undefined reference to `strsm_'
c:/msys/1.0/lib/liblapack.a(sgetri.f.obj):sgetri.f:(.text+0x7d1): undefined reference to `sswap_'
c:/tdm-gcc-64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/../../../../x86_64-w64-mingw32/bin/ld.exe: c:/msys/1.0/lib/liblapack.a(sgetri.f.obj): bad reloc address 0x0 in section `.pdata'
collect2.exe: error: ld returned 1 exit status
make[2]: *** [libarmadillo.dll] Error 1
make[1]: *** [CMakeFiles/armadillo.dir/all] Error 2
make: *** [all] Error 2
Куда мне идти отсюда?
Ну, {s, d, c, z} trsm и sswap являются частью BLAS. Так что по какой-то причине вы даже не ссылаетесь на библиотеку blas, которую вы ранее (?) Создали.