如何确定我正确安装了Lapack和Armadillo库
How I can be sure that I install LAPACK and Armadillo libraries correctly?
我是C 的Lapack库中的新手。我从事大规模矩阵及其QR分解。我在代码块中使用Lapack库有问题。我根据以下链接链接了此库和代码块:如何链接到具有代码::块的库?我的代码:: blocks知道lapacks中的所有标题,命令和函数,但我无法运行dgeqrf
函数以进行qr factoization使用此错误: undefined reference to
dgeqrf`。
我也尝试使用 armadillo 库。我能够运行其简单命令,但是当我想运行qr(Q,R,X)
进行分解时,它会产生此错误:undefined reference to _gfortran_compare_string'
。因此,我认为问题可能是在安装过程中(对于拉帕克)。我已经下载了Lapack的新版本,并使用Cmakein c: lapack 安装了它。我的操作系统是Windows 7(64 Bite)。 谁能告诉我我的错误在哪里?在安装步骤或链接步骤中?如何找到此问题的原因以及如何解决?拉帕克库的构建日志消息:
-------------- Build: Debug in lllll (compiler: GNU GCC Compiler)---------------
mingw32-g++.exe -LC:lapack -LC:arma -LC:ttmath-0.9.3 -L"C:Program FilesRR-3.2.1include" -LC:lapacklib -LC:arma -o binDebuglllll.exe objDebugmain.o C:lapackliblibblas.a C:lapacklibliblapack.a C:lapacklibliblapacke.a C:lapackliblibtmglib.a C:armaexampleslib_win64blas_win64_MT.lib C:armaexampleslib_win64lapack_win64_MT.lib
C:lapacklibliblapack.a(ilaenv.f.obj):ilaenv.f:(.text+0x376): undefined reference to `_gfortran_compare_string'
C:lapacklibliblapack.a(ilaenv.f.obj):ilaenv.f:(.text+0x3a1): undefined reference to `_gfortran_compare_string'
C:lapacklibliblapack.a(ilaenv.f.obj):ilaenv.f:(.text+0x3e6): undefined reference to `_gfortran_compare_string'
C:lapacklibliblapack.a(ilaenv.f.obj):ilaenv.f:(.text+0x40d): undefined reference to `_gfortran_compare_string'
C:lapacklibliblapack.a(ilaenv.f.obj):ilaenv.f:(.text+0x434): undefined reference to `_gfortran_compare_string'
C:lapacklibliblapack.a(ilaenv.f.obj):ilaenv.f:(.text+0x45b): more undefined references to `_gfortran_compare_string' follow
C:/Program Files (x86)/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: C:lapacklibliblapack.a(ilaenv.f.obj): bad reloc address 0x60 in section `.rdata'
C:/Program Files (x86)/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
也适用于armadillo库:
-------------- Build: Debug in ltest (compiler: GNU GCC Compiler)---------------
mingw32-g++.exe -Wall -fexceptions -g -IC:ttmath-0.9.3 -I"C:Program FilesRR-3.2.1include" -IC:lapackinclude -IC:armainclude -c "D:c++ codeltestmain.cpp" -o objDebugmain.o
mingw32-g++.exe -LC:ttmath-0.9.3 -L"C:Program FilesRR-3.2.1include" -LC:lapacklib -LC:arma -o binDebugltest.exe objDebugmain.o C:armaexampleslib_win64blas_win64_MT.lib C:armaexampleslib_win64lapack_win64_MT.lib C:lapackliblibblas.a C:lapacklibliblapack.a C:lapacklibliblapacke.a C:lapackliblibtmglib.a
C:lapacklibliblapack.a(ilaenv.f.obj):ilaenv.f:(.text+0x376): undefined reference to `_gfortran_compare_string'
C:lapacklibliblapack.a(ilaenv.f.obj):ilaenv.f:(.text+0x3a1): undefined reference to `_gfortran_compare_string'
C:lapacklibliblapack.a(ilaenv.f.obj):ilaenv.f:(.text+0x3e6): undefined reference to `_gfortran_compare_string'
C:lapacklibliblapack.a(ilaenv.f.obj):ilaenv.f:(.text+0x40d): undefined reference to `_gfortran_compare_string'
C:lapacklibliblapack.a(ilaenv.f.obj):ilaenv.f:(.text+0x434): undefined reference to `_gfortran_compare_string'
C:lapacklibliblapack.a(ilaenv.f.obj):ilaenv.f:(.text+0x45b): more undefined references to `_gfortran_compare_string' follow
C:/Program Files (x86)/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: C:lapacklibliblapack.a(ilaenv.f.obj): bad reloc address 0x60 in section `.rdata'
C:/Program Files (x86)/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
与您编写的内容相反,构建日志显示没有 undefined reference to dgeqrf
。他们俩都表现出未定义的参考 _gfortran_compare_string
:
C:lapacklibliblapack.a(ilaenv.f.obj):ilaenv.f:(.text+0x376): undefined reference to `_gfortran_compare_string'
此错误消息告诉您,库liblapack.a
中的对象文件ilaenv.f.obj
呼叫函数_gfortran_compare_string
,但是链接器发现您已经提供了没有对象文件或定义该功能的库。
的原因是liblapack.a
是一个fortran库 - 使用GCC Fortran(gfortran
)编辑 - 这取决于libgfortran
。
链接程序依赖的库时,您还必须链接任何其他库第一个库取决于哪个。
您似乎是您的拉帕克库是C 库的印象。他们是Fortran图书馆:拉帕克(Lapack)用福特兰(Fortran)编写。只要您满足链接要求,就可以在C 程序中链接它们。
在这种情况下,这意味着您必须将libgfortran
添加到链接中。而且您必须将其添加到链接序列 依赖于此的任何对象文件或库。
您说您与Cmake一起安装了Lapack。如果是这样,那么您从源构建了Lapack库,使用CMAKE生成的make
系统,并且make
必须使用gfortran
编译器在您的系统上这样做。
由于您在某处有gfortran
,因此您也有libgfortran
。查找安装目录gfortran
-它将包含一个子目录bin
,其中包含gfortran.exe
-并要求Windows到在该安装目录下搜索静态库libgfortran.a
或动态库(可能) libgfortran-3.dll
。您似乎正在使用静态库:在这种情况下,添加libgfortran.a
链接的结尾。
顺便说一句,您指定链接库的方式有相当大的冗余。自从你通过绝对路径名来指定所有库 - 例如C:lapacklibliblapack.a
-指定任何-L
选项是毫无意义的,因为-L
链接器选项仅用于说明链接器哪些目录要搜索您在通常的简短形式中指定的诽谤,例如
... -LC:lapacklib ... -llapack ... -ltmglib ...
提供不包含任何内容的目录的链接器-L
选项是毫无意义的您要链接的库,包括包含标头文件的目录。在CodeBlocks中,您可以从项目的构建选项中删除所有搜索目录 -> linker 除非您选择在 linker > -> 其他链接器选项中以简短形式指定图书馆
- 有可能在Armadillo中复制MATLAB circshift方法吗
- 直接在RcppArmadillo中调用LAPACK例程
- 矩阵rowSums()与colSums(()在R与Rcpp与Armadillo中的效率
- Armadillo正在为共享的lapack库获取未定义的参考
- LAPACK函数在第一次迭代后变慢
- 如何在Visual Studio中并行化armadillo
- 有没有一种算法可以将 LAPACK 排列更改为真正的排列?
- Lapack函数DGTSV通过C /Visual Studio提供未解决的外部符号
- r-(C ,Armadillo)从矩阵中更换列矢量的一部分
- MATLAB faster than LAPACK?
- Armadillo是否支持布尔和8位型矩阵和立方体
- R- armadillo c :用其他两个向量对向量进行排序
- 将矩阵划分为Armadillo中的载体
- SuperLu和LaPack的比较在与犰狳进行基准测试时失败
- 将行附加到Armadillo .mat文件
- 使用高级构造函数将阵列转换为Armadillo Vec
- C :结构内部的Armadillo矩阵
- 如何确定我正确安装了Lapack和Armadillo库
- 在Windows 7的Qt Creator项目中链接MLPACK, Armadillo和LAPACK/BLAS
- Armadillo C++和BLAS和ATLAS在mingw32下找不到lapack BLAS