当我用犰狳 makefile 编译 example2.cpp 并运行它时,我收到一条错误消息
error: det(): use of ATLAS or LAPACK needs to be enabled
我该如何解决?当我尝试使用解决方案时,我遇到了类似的错误。我的设置的详细信息是:
- Ubuntu Lucid Lynx 10.04
- 犰狳版本:2.4.2(Loco Lounge Lizard)
- 阿特拉斯 3.9.51
- 提升 1.48.0
- g++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3
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 效果很好。在那之后,犰狳编译得很好。