当我用armadillo makefile编译example2.cpp并运行它时,我收到一条错误消息
error: det(): use of ATLAS or LAPACK needs to be enabled
我该如何解决?当我尝试使用solve时,我有类似的错误。我的设置细节是:
在犰狳之前安装了Atlas,犰狳安装配置了Cmake。我远不是cmake的专家,但我认为当我用它生成makefile时应该找到ATLAS。犰狳文档似乎说如果我用cmake安装,我不需要做任何手动启用ATLAS。我试图通过插入
手动破解example2.cpp#define ARMA_USE_ATLAS
在标题之前,但它只会在Cblas上生成一堆关于缺失内容的错误。也许有一个步骤缺少允许cmake找到ATLAS。感觉我错过了一些简单而又关键的东西。任何帮助将不胜感激。
编辑:无论出于什么原因我都不能再添加评论了,所以我在这里发布了对@ Appleman1234答案的回复。
我从源头编译了犰狳和ATLAS。我认为ATLAS捆绑了LAPACK和BLAS并进行了优化。当我编译它时,我通过一个位置来lapack tar像
./configure --shared --with-netlib-lapack-tarfile=/<path>/lapack-3.3.1.tgz
我还在atlas lib目录中看到以下文件:
libatlas.a, libcblas.a, libf77blas.a, liblapack.a, libptcblas.a, libptf77blas.a libsatlas.so, libtatlas.so
似乎表明系统上安装了blas,cblas和lapack。但是,犰狳中的CMakeCache.txt似乎表明cmake没有找到BLAS,CBLAS,CLAPACK如下
BLAS_LIBRARY:FILEPATH=BLAS_LIBRARY-NOTFOUND
在CMakeCache.txt中没有ATLAS的概念,所以我认为它也找不到。也许我错了,但似乎我不知何故需要将cmake指向ATLAS,我只是不知道如何。假设ATLAS有BLAS,LAPACK和CBLAS,我也可能会出错。我以为我把它们编成了ATLAS的一部分,但我可能错了。非常感谢您的评论。
德克的建议几乎奏效了。我在其中一篇回复中提到的问题是cmake正在跟踪。我误以为这是cmake没有找到clapack的问题。实际上,在仔细查看cmake输出之后,我意识到它在找不到好的编译器时遇到了问题,或者在决定使用编译器/ usr / bin / c ++时拖延了脚步。所以我做了CXX = g ++然后cmake再次工作正常。之后犰狳编译好了。
答案 0 :(得分:2)
您是否从源代码安装了犰狳?
运行cmake .
或./configure
时,cmake输出了什么?
后者只需拨打cmake .
。
是否输出了以下值?
-- CLAPACK_FOUND = YES
-- CBLAS_FOUND = YES
如果不是,则根据CMakeLists.txt,ARMA_USE_ATLAS
设置为false并且不使用ATLAS。
要使用det
或solve
,如果要使用ATLAS或只安装LAPACK,请安装CLAPACK和CBLAS。
答案 1 :(得分:1)
由于Armadillo存在于Debian / Ubuntu中,您可以简单地安装所有已知的构建依赖项,以确保您拥有所需的所有-dev
个包:
edd@max:~$ sudo apt-get build-dep armadillo
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
edd@max:~$
在这方面看来我的系统已完成。