首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让Armadillo在Windows上工作?

如何让Armadillo在Windows上工作?
EN

Stack Overflow用户
提问于 2014-07-03 16:54:01
回答 3查看 10.4K关注 0票数 4

我不能让Armadillo 4.3在Windows上工作。包含了库armadillo/include,然后我运行g++ "-LC:\\Armadillo\\BLAS_Lapack" -o1 -o test.exe test.o -llapack -lblas,然后我得到以下错误消息:

代码语言:javascript
复制
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,我会得到

代码语言:javascript
复制
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

我根据自述文件取消了对配置文件config.hpp的注释。

有人知道怎么让Armadillo工作吗?(我使用的是Eclipse CDT。)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-04 21:21:44

现在它似乎起作用了!我正在使用自述文件中指示的网页中的Lapack和BLAS,该自述文件是我根据@enhzflep注释编译的。

要在Eclipse CDT中正确链接所有内容,请右键单击项目并转到属性,然后:

  1. 在"C/C++ Build⟼Settings⟼Armadillo C++编译器命令“下键入:g++ -I"C:\Armadillo\include" (替换为Armadillo文件夹的正确路径)。请确保对所有配置执行此操作(将在顶部的下拉菜单中选择)。在"C/C++ Build⟼Settings⟼MinGW C++ Linker⟼Libraries“下,将lapackblas添加到Armadillo文件夹C:\Armadillo\include.

include目录中”add lapackblas to Libraries.

  • Under"C/C++ General⟼path⟼Symbols⟼GNU C++“。

它可能与原始的Lapack和BLAS文件一起工作。它对我不起作用,因为我只在"C/C++ General⟼path⟼Symbols⟼GNU C++“下添加了Armadillo的路径,我猜它只告诉编辑器需要什么数据类型和函数,而不是编译器。

票数 3
EN

Stack Overflow用户

发布于 2014-11-02 02:41:43

它花了一段时间才弄对,但一旦它起作用,它似乎是透明的。我会一步一步地解释。(确保已按照config.hpp文件的自述文件中的说明取消了对正确行的注释)

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

其中每个命令如下所示:

  1. g++:GNU包含编译器(使用equationsolution.com)
  2. main.cpp:中的MinGW 4.9.1 C++我的C++程序的主文件(我有一个抽象而具体的类定义了Levenshtein armadillo:{ ARMADILLO_ROOT }\ Include :GCC C++编译器包含路径(以包含Armadillo库),其中ARMADILLO_ROOT是您解压并放置files
  3. -L G++ C:{ARMADILLO_的位置ROOT}\examples\lib_win64:MinGW C++链接器库链接路径(用于链接BLAS和LAPACK库)我使用的是armadillo提供的默认库,我相信,根据文档,您可以也应该在生产instance)
  4. -lblas_win64_MT -llapack_win64_MT中替换这些线性库:确定要使用的库(名称必须匹配,因此您不能将-lblas或-llapack放入其中,除非您的文件以这种方式命名-在此armadillo版本中,默认情况下它们被命名为blas_win64_MT lapack_win64_MT (win64,因为我使用的是MinGW/C++ 64位和64位armadillo,它们应该匹配)

遵循此逻辑,您可以使用以下配置eclipse (使用eclipse露娜R1 4.4.1 -should在其他版本上的过程相同):

click on >右键单击该项目,然后在左侧菜单上的弹出式菜单中选择"C/C++ Build“(C/ C++生成)下的”

  • “(属性)项在左侧菜单上选择”blas_win64_MT lapack_win64_MT.“”
    • “单击"Includes (-I)”并添加包含路径C:{ARMADILLO_ROOT}\include (Screenshot1)
    • Under "MinGW C++链接器“单击"Libraries”(库)将每个"Libraries (-l)“添加为已命名的库在按下"OK"

    之前,单击"Libraries“add a "Library search path (-L)”并单击"Apply“按钮应用相同的"MinGW C++ Linker”。

--截图1

--截图2

票数 8
EN

Stack Overflow用户

发布于 2014-07-04 10:29:46

如果你在Windows上使用MinGW,一个好的选择是在Armadillo上使用OpenBLAS。OpenBLAS提供了BLAS和LAPACK的优化和多线程实现:http://xianyi.github.io/OpenBLAS/

OpenBLAS项目为Windows提供了预编译版本。源代码还可以在Linux和MacOS X下轻松编译。

请注意,Armadillo不支持Windows下的自动安装。基于cmake的安装程序提供了一条很大的警告消息--建议您注意它。

执行以下操作(如Armadillo随附的README.txt文件中所述),而不是自动安装:

  1. 手动修改include/armadillo_bits/config.hpp以启用BLAS和LAPACK。换句话说,在include/armadillo_bits/config.hpp中确保ARMA_USE_BLASARMA_USE_LAPACK是未注释的include/armadillo_bits/config.hpp,禁用ARMA_USE_WRAPPER,即。确保它被注释掉了。
  2. 当编译你的C++程序时,告诉你的编译器直接使用include文件夹,并链接到openblas。例如,对于gcc,使用-I开关指定包含文件夹。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24549196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档