【问题标题】:Compiling c++ with Armadillo library at NeatBeans在 NetBeans 使用 Armadillo 库编译 c++
【发布时间】:2012-06-04 23:09:20
【问题描述】:

我将编译包含 Armadillo 库的 C++ 程序。 这个问题可以通过命令行使用这个命令来解决:

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

但是,当我将 -O1 -larmadillo 添加到我的 NetBeans 项目的编译选项时,我得到了相当多的错误。

我收到了这些错误:

"/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)

【问题讨论】:

  • 如果您向我们显示错误会有所帮助,以便我们更好地帮助您

标签: c++ netbeans armadillo


【解决方案1】:

您的犰狳安装似乎不完整,或者您安装了两个版本的犰狳。我建议您手动卸载任何以前版本的 Armadillo(包括包含和运行时库),然后使用新下载的 Armadillo .tar.gz 包进行全新安装:http://arma.sourceforge.net/download.html

或者,您可以解决您遇到的问题。编辑“include/armadillo_bits/config.hpp”并用 ARMA_USE_WRAPPER 注释掉该行。然后,不使用 -larmadillo 链接,而是使用 -lblas -llapack 链接

【讨论】:

  • 链接错误是否已更改?如果您仍然遇到链接错误,最可能的解释是您有 2 个 Armadillo 副本,并且编译器使用的是未经编辑或旧版本。我建议明确告诉编译器你的犰狳安装在哪里(这可能只是你解压一个新的犰狳档案的地方)。例如,如果犰狳在 /home/blah/armadillo-3.2.2,您可以像这样指定包含文件夹: g++ myprog.cpp -o myprog -O2 -I /home/blah/armadillo-3.2.2/include -llapack -lblas
  • 仅仅说“它有效”或“它不起作用”是没有帮助的,为什么不与我们分享您为使其有效所做的工作呢?
【解决方案2】:

我知道这是一个老问题,但我最近遇到了麻烦,所以如果其他人遇到与我相同的问题,我想提供帮助。这是在 64 位 Windows 7 上使用 NetBeans C++ 设置 Armadillo 库的方法。

  1. 从http://arma.sourceforge.net/download.html下载最新版本的犰狳

  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 以及如果您想使用命名空间 arma;

我希望这会有所帮助!干杯!

【讨论】:

    猜你喜欢
    • 2021-08-24
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多