簡體   English   中英

具有LAPACK,BLAS和GFortran的鏈接錯誤Armadillo C ++庫未定義參考

[英]Link error Armadillo C++ Library with LAPACK, BLAS and GFortran undefined reference

我正在嘗試使用LAPACK和BLAS使用MinGW for Windows 32位編譯Armadillo 4.300(從源代碼編譯,從http://icl.cs.utk.edu/lapack-for-windows/lapack/下載)

我使用以下cmake命令生成makefile:

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庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM