在编译/链接期间无法禁用 Armadillo Wrapper

Posted

技术标签:

【中文标题】在编译/链接期间无法禁用 Armadillo Wrapper【英文标题】:Can't disable Armadillo Wrapper During Compilation/Linking 【发布时间】:2014-09-19 05:31:39 【问题描述】:

我正在尝试使用 MinGW32 和 OpenBLAS 在 Windows 32 下编译 Armadillo C++ 库。

我已经尝试了有关该主题的所有教程和 ***.com 问题,但似乎仍然无法禁用 wrapper.obj 的编译,这会产生链接错误“未定义对 `sdot_' 的引用”等等。这些是包装器找不到的 BLAS 符号。

我没有安装其他 BLAS/LAPACK 库,并且在 cmake 输出中确认已找到 libopenblas.dll。

如何禁用 wrapper.obj 的编译和链接?编辑 config.hpp 没有效果。

【问题讨论】:

【参考方案1】:

您不必使用基于 cmake 的安装程序即可使用 Armadillo。安装程序只需创建与 BLAS 和 LAPACK 链接的包装库。您可以直接将基于 Armadillo 的程序与 BLAS 和 LAPACK 链接:

g++ prog.cpp -o prog -O2 -I armadillo-4.500.0/include -DARMA_DONT_USE_WRAPPER -DARMA_USE_BLAS -DARMA_USE_LAPACK -lblas -llapack

armadillo-4.500.0/include 更改为 Armadillo 包含文件夹所在的位置。

【讨论】:

我不需要先编译/链接犰狳吗?我不确定我是否理解,对不起。在这个阶段我实际上无法编译/链接犰狳,它不接受我可以提供的任何 BLAS/LAPACK 库的符号。我也尝试过 OpenBLAS,但没有成功。 Armadillo 首先是一个模板库(即只有 C++ 头文件)。模板库不需要传统意义上的编译。 Armadillo 的第二个可选部分是运行时库,它只是 BLAS 和 LAPACK 的组合包装器。您可以在没有运行时库的情况下使用 Armadillo 标头。如上所述,只需直接链接 LAPACK 和 BLAS。

以上是关于在编译/链接期间无法禁用 Armadillo Wrapper的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 Armadillo 库运行示例时出现 Xcode C++ 链接器错误

链接器错误、Xcode 5 和 Armadillo:“找不到 -larmadillo.4.0.2 的库”

链接 Yaml-cpp 和 Armadillo 共享库的 CMake 项目

链接错误:Armadillo 库中的“未定义对‘pthread_atfork’的引用”

了解 Makefile。 make 无法链接犰狳库

编译 Mex 和 Armadillo 的困难