Cmake 犰狳C++;矩阵库——如何使用ATLAS或LAPACK?
当我用armadillo makefile编译example2.cpp并运行它时,我收到一条错误消息Cmake 犰狳C++;矩阵库——如何使用ATLAS或LAPACK?,cmake,atlas,armadillo,Cmake,Atlas,Armadillo,当我用armadillo makefile编译example2.cpp并运行它时,我收到一条错误消息 error: det(): use of ATLAS or LAPACK needs to be enabled 我该如何解决这个问题?当我尝试使用solve时,我也有类似的错误。我的设置的详细信息如下: Ubuntu Lucid Lynx 10.04 犰狳版本:2.4.2(本地躺椅蜥蜴) 图集3.9.51 BOOST 1.48.0 g++(Ubuntu 4.4.3-4ubuntu5.1)4
error: det(): use of ATLAS or LAPACK needs to be enabled
我该如何解决这个问题?当我尝试使用solve时,我也有类似的错误。我的设置的详细信息如下:
- Ubuntu Lucid Lynx 10.04
- 犰狳版本:2.4.2(本地躺椅蜥蜴)
- 图集3.9.51
- BOOST 1.48.0
- g++(Ubuntu 4.4.3-4ubuntu5.1)4.4.3
#define ARMA_USE_ATLAS
在标题之前,但它只是生成了一系列关于CBLA上缺少内容的错误。也许还有一个步骤让cmake找到ATLAS。我觉得我错过了一些简单但关键的东西。任何帮助都将不胜感激
其他细节:
编辑:无论出于什么原因,我不能再添加评论了,所以我在这里回复@Appleman1234 answer
我从源头上汇编了犰狳和地图集。我认为ATLAS已经将LAPACK和BLAS捆绑在一起并进行了优化。当我编译它时,我向lapack tar传递了一个位置,就像
./configure --shared --with-netlib-lapack-tarfile=/<path>/lapack-3.3.1.tgz
这似乎表明系统上安装了blas、cblas和lapack。然而,犰狳中的CMakeCache.txt似乎表明cmake没有找到BLAS、CBLAS和CLAPACK,如下所示
BLAS_LIBRARY:FILEPATH=BLAS_LIBRARY-NOTFOUND
CMakeCache.txt中没有ATLAS的概念,所以我假设也没有找到它。也许我弄错了,但似乎我需要把cmake指向ATLAS,我只是不知道怎么做。假设ATLAS有BLAS、LAPACK和CBLAS,我也可能会出错。我以为我把它们编成了地图集的一部分,但我可能错了。非常感谢您的评论
问题的解决办法:
德克的建议几乎奏效了。我在回复他的一篇帖子时提到的问题是,cmake犹豫不决。我把它误诊为cmake找不到clapack的问题。事实上,在更仔细地查看了cmake输出后,我意识到它在决定用作compiler/usr/bin/c++时遇到了找不到好的编译器的问题,或者说是拖拖拉拉的问题。所以我做了CXX=g++然后又做了一次cmake,效果很好。在那之后,犰狳变得很好 您是从源代码安装犰狳的吗 运行
cmake.
或/configure
时,cmake输出了什么
后者只调用cmake.
它是否输出了以下值
-- CLAPACK_FOUND = YES
-- CBLAS_FOUND = YES
如果不是是,则根据CMakeLists.txt,ARMA\u USE\u ATLAS
设置为false,而ATLAS不被使用
要使用
det
或solve
,如果要使用ATLAS或只安装LAPACK,请安装CLAPACK和CBLAS。是否从源代码安装armadillo
运行cmake.
或/configure
时,cmake输出了什么
后者只调用cmake.
它是否输出了以下值
-- CLAPACK_FOUND = YES
-- CBLAS_FOUND = YES
如果不是是,则根据CMakeLists.txt,ARMA\u USE\u ATLAS
设置为false,而ATLAS不被使用
为了使用
det
或solve
,如果您想使用ATLAS或只是安装LAPACK,请安装CLAPACK和CBLAS。由于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:~$
看来我的系统在这方面是完整的。由于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:~$
看来我的系统在这方面是完整的。如果我坚持使用debian软件包,我会更高兴。只是康拉德每月更新armadillo 2-3次,我想debian软件包远远落后了。旧版本的boost不太受关注,但我基本上在我的机器上安装了最新的boost、atlas和armadillo,以跟上Conrad的更新。由于PackageManager想要旧的boost和旧的armadillo,所以我需要将其全部删除,并可能删除我花了一段时间配置的Atlas。如果有必要,我想我会吞下它,我只是希望我错过了一些简单的东西。你当然不必删除任何东西。只需保留打包好的东西,如果必须,请在/usr/local中进行补充。我只是按照你的建议做了。从cmake收到一条错误消息。基本上,它看起来像是cmake找到了BLAS、Boost、CBLAS,但找不到CLAPACK包含和库。有趣的是,它在/usr/include中找到了CBLAS include,但使用了我安装的ATLAS/usr/local/ATLAS/lib/libcblas.a中的CBLAS库。所以问题是,我如何修复这个缺失的CLAPACK问题?我实际上试图用ATLAS BLAS编译独立的CLAPACK,但我在测试BLAS时遇到了一个错误,这对我来说很难诊断[如果我坚持使用debian软件包,我会更高兴。只是Conrad一个月更新armadillo 2-3次,debian软件包远远落后于我的想法。旧版本的boost不那么令人担忧,但是我基本上在我的机器上安装了最新的boost、atlas和armadillo,以跟上Conrad的更新。因为软件包经理想要旧版本的boost还有老犰狳,我需要删除所有的东西,可能还要删除我花了一段时间配置的Atlas。我想如果有必要的话我会吞下它,我只是希望我遗漏了一些简单的东西。你当然不必删除任何东西。只需保留包装好的东西,如果必须的话,在/usr/local中进行补充。我只是按照你的建议做了。G来自cmake的错误消息。基本上,它看起来像是cmake找到了BLAS、Boost、CBLAS,但找不到CLAPACK包含和库。有趣的是,它在/usr/include中找到了CBLAS包含,