我不能让Armadillo 4.3在Windows上运行。包含库armadillo/include
,我运行g++ "-LC:\\Armadillo\\BLAS_Lapack" -o1 -o test.exe test.o -llapack -lblas
,然后收到以下错误消息:
C:/Armadillo/include/armadillo_bits/blas_wrapper.hpp:183: undefined reference to `wrapper_ddot_'
test.o: In function `ZN4arma4blas4gemvIdEEvPKcPKiS5_PKT_S8_S5_S8_S5_S8_PS6_S5_':
C:/Armadillo/include/armadillo_bits/blas_wrapper.hpp:34: undefined reference to `wrapper_dgemv_'
test.o: In function `ZN4arma4blas4gemmIdEEvPKcS3_PKiS5_S5_PKT_S8_S5_S8_S5_S8_PS6_S5_':
C:/Armadillo/include/armadillo_bits/blas_wrapper.hpp:69: undefined reference to `wrapper_dgemm_'
如果我运行g++ -o1 -o test.exe test.o -llapack -lblas
,我会
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -llapack
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lblas
我根据README文件取消了配置文件config.hpp
的注释。
有人知道如何让犰狳工作吗? (我正在使用Eclipse CDT。)
答案 0 :(得分:7)
需要一段时间才能做到这一点,但一旦工作就会显得透明。我会一步一步解释。 (确保已按照config.hpp文件的README中的指示取消注释正确的行)
使用blas / lapack进行编译的一般命令(使用默认的armadillo(当前版本4.500.0)并使其更快:)
g ++ main.cpp -I C:{ARMADILLO_ROOT} \ include -L C:{ARMADILLO_ROOT} \ examples \ lib_win64 -lblas_win64_MT -llapack_win64_MT
其中每个命令如下:
g ++ :GNU G ++编译器(使用Equationsolution.com的MinGW 4.9.1 C ++)
main.cpp :我的C ++程序的主文件(我有一个定义Levenshtein算法的抽象和具体的类)
-IC:{ARMADILLO_ROOT} \ include :GCC C ++编译器包含路径(包含Armadillo库),其中ARMADILLO_ROOT是您解压缩并放置犰狳文件的位置
-LC:{ARMADILLO_ROOT} \ examples \ lib_win64 :MinGW C ++链接库链接路径(链接BLAS和LAPACK库)我使用了armadillo提供的默认库,我相信,根据文档,您可以并且应该在生产实例中替换这些线性库)
-lblas_win64_MT -llapack_win64_MT :确定要使用的库(名称必须匹配,因此您不能放-lblas或-llapack,除非您的文件以这种方式命名 - 默认情况下在此犰狳版本名为blas_win64_MT lapack_win64_MT(win64,因为我使用的是MinGW / C ++ 64位和64位犰狳[它们应该匹配])
遵循这个逻辑,您可以使用以下命令配置eclipse(使用eclipse Luna R1 4.4.1 - 应该是与其他版本相同的过程):
- Screenshot1
- Screenshot2
答案 1 :(得分:3)
现在似乎工作了!我正在使用自述文件中指示的网页中的Lapack和BLAS,我根据@enhzflep评论自行编译。
要在Eclipse CDT中正确链接所有内容,请右键单击项目并转到属性,然后:
g++ -I"C:\Armadillo\include"
(替换为Armadillo文件夹的正确路径)。确保对所有配置执行此操作(在顶部的下拉菜单中选择)。lapack
和blas
添加到库中。include
的{{1}}目录路径。它可能与原始的Lapack和BLAS文件一起使用。它对我来说不起作用,因为我只是在#C; C ++General⟼Paths和Symbols⟼GNUC++"下添加了Armadillo的路径,我想这只能告诉编辑器什么数据类型和函数是期望而不是编译器。
答案 2 :(得分:2)
如果您在Windows上使用MinGW,一个不错的选择是将OpenBLAS与Armadillo一起使用。 OpenBLAS提供BLAS和LAPACK的优化和多线程实现: http://xianyi.github.io/OpenBLAS/
OpenBLAS项目为Windows提供预编译版本。源代码也可以在Linux和MacOS X下轻松编译。
请注意,Armadillo不支持Windows下的自动安装。基于cmake的安装程序提供了一个很大的警告信息 - 你建议你注意它。
而不是自动安装,请执行以下操作(如Armadillo附带的README.txt
文件中所述):
手动修改include/armadillo_bits/config.hpp
以启用BLAS和LAPACK。换句话说,请确保ARMA_USE_BLAS
和ARMA_USE_LAPACK
取消注释(已启用)。
同样在include/armadillo_bits/config.hpp
范围内,请停用ARMA_USE_WRAPPER
,即。确保它已被注释掉。
编译C ++程序时,请告诉编译器直接使用armadillo include
文件夹,并与openblas链接。例如,使用gcc使用-I
开关指定包含文件夹。