Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 犰狳C++;矩阵库——如何使用ATLAS或LAPACK?_Cmake_Atlas_Armadillo - Fatal编程技术网

Cmake 犰狳C++;矩阵库——如何使用ATLAS或LAPACK?

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

当我用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.4.3
Atlas安装在armadillo之前,armadillo安装配置了Cmake。我远非cmake方面的专家,但我认为当我使用ATLAS生成makefiles时,它应该会找到ATLAS。Armadillo文档似乎说,如果我使用cmake安装,我不需要手动启用ATLAS。我试图通过插入

#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包含,