在NeatBeans中使用Armadillo库编译C++代码

3

我要编译一个包含Armadillo库的C++程序。 通过以下命令可以在命令行中解决此问题:

g++ '/arm.cpp' -o example -O1 -larmadillo

但是当我在我的NetBeans项目的编译选项中添加-O1 -larmadillo时,我遇到了相当多的错误。
我得到了以下这些错误:
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/home/atx/NetBeansProjects/armadillo'
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux-x86/armadillo
make[2]: Entering directory `/home/atx/NetBeansProjects/armadillo'
mkdir -p dist/Debug/GNU-Linux-x86
g++ -O3    -o dist/Debug/GNU-Linux-x86/armadillo build/Debug/GNU-Linux-x86/main.o  
build/Debug/GNU-Linux-x86/main.o: In function `gemv<double>':
/usr/include/armadillo_bits/blas_wrapper.hpp:79: undefined reference to `wrapper_dgemv_'
/usr/include/armadillo_bits/blas_wrapper.hpp:79: undefined reference to `wrapper_dgemv_'
/usr/include/armadillo_bits/blas_wrapper.hpp:79: undefined reference to `wrapper_dgemv_'
/usr/include/armadillo_bits/blas_wrapper.hpp:79: undefined reference to `wrapper_dgemv_'
build/Debug/GNU-Linux-x86/main.o: In function `gemm<double>':
/usr/include/armadillo_bits/blas_wrapper.hpp:114: undefined reference to `wrapper_dgemm_'
/usr/include/armadillo_bits/blas_wrapper.hpp:114: undefined reference to `wrapper_dgemm_'
/usr/include/armadillo_bits/blas_wrapper.hpp:114: undefined reference to `wrapper_dgemm_'
/usr/include/armadillo_bits/blas_wrapper.hpp:114: undefined reference to `wrapper_dgemm_'
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-Linux-x86/armadillo] Error 1
make[2]: Leaving directory `/home/atx/NetBeansProjects/armadillo'
make[1]: *** [.build-conf] Error 2
make[1]: Leaving directory `/home/atx/NetBeansProjects/armadillo'
make: *** [.build-impl] Error 2


BUILD FAILED (exit value 2, total time: 136ms)

如果您展示错误信息,我们就能更好地帮助您。 - pyCthon
2个回答

3
看起来你的Armadillo安装不完整,或者你安装了两个版本的Armadillo。我建议你手动卸载之前的任何版本的Armadillo(包括头文件和运行时库),然后使用新下载的Armadillo .tar.gz软件包进行全新安装: http://arma.sourceforge.net/download.html 另外,你可以解决你遇到的问题。编辑“include/armadillo_bits/config.hpp”并注释掉带有ARMA_USE_WRAPPER的行。然后,将链接选项从-larmadillo更改为-lblas -llapack。

1
链接错误有变化吗?如果您仍然遇到链接错误,最可能的解释是您有两份Armadillo副本,编译器正在使用未编辑或旧版本。我建议明确告诉编译器Armadi​​llo安装的位置(这可以是您解压新的Armadillo存档的位置)。例如,如果Armadillo在/home/blah/armadillo-3.2.2中,则可以像这样指定包含文件夹:g++ myprog.cpp -o myprog -O2 -I /home/blah/armadillo-3.2.2/include -llapack -lblas - mtall
2
仅仅说“它可以工作”或者“它不能工作”是没有帮助的,为什么不和我们分享一下你所做的让它工作的事情呢? - qed

3
我知道这是一个旧问题,但我最近遇到了这个问题,所以我想帮助如果有人遇到和我一样的问题。以下是在64位Windows 7上如何在NetBeans C++中设置Armadillo库。
  1. http://arma.sourceforge.net/download.html下载最新版本的Armadillo。

  2. 将其解压缩到任何您想要的目录中。

  3. 进入Netbeans->项目属性-> C ++编译器

    3.1 包含目录 ->找到您的Armadillo目录并选择“include”文件夹。

    3.2 预处理器定义 -> ARMA_USE_LAPACK ARMA_USE_BLAS

  4. 进入Netbeans ->项目属性 ->链接器

    4.1 其他库目录 ->找到您的Armadillo目录并选择文件夹“ examples/lib_win64”。

    4.2 其他依赖项 -> lapack_win64_MT.lib blas_win64_MT.lib

  5. 转到您的项目文件夹,并添加来自Armadillo / examples / lib_win64的文件。应添加4个文件 ->blas_win64_MT.dll,blas_win64_MT.lib,lapack_win64_MT.dll和lapack_win64_MT.lib。

这就是全部内容。现在,您可以在C ++中使用Armadillo库,只需在cpp中添加#include,并希望使用namespace arma;

希望这有所帮助!干杯!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接