(macOS Big Sur) CMake 找不到 BLAS缺少:BLAS_LIBRARIES

问题描述

我正在尝试在 macOS 上制作 MultiNest/pymultinest;该程序需要 openblas 和 lapack 作为依赖项。我已经使用自制软件安装了两者,但是当我尝试在 MultiNest 构建目录中进行 cmake 时,出现以下错误:

CMake Error at /usr/local/Cellar/cmake/3.20.5/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find BLAS (missing: BLAS_LIBRARIES)
Call Stack (most recent call first):
  /usr/local/Cellar/cmake/3.20.5/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
  /usr/local/Cellar/cmake/3.20.5/share/cmake/Modules/FindBLAS.cmake:1045 (find_package_handle_standard_args)
  /usr/local/Cellar/cmake/3.20.5/share/cmake/Modules/FindLAPACK.cmake:265 (find_package)
  /usr/local/Cellar/cmake/3.20.5/share/cmake/Modules/FindLAPACK.cmake:291 (_lapack_find_dependency)
  src/CMakeLists.txt:31 (FIND_PACKAGE)

我已经声明了许多路径;

export LDFLAGS="-L/usr/local/opt/openblas/lib"
export CPPFLAGS="-I/usr/local/opt/openblas/include"
export PKG_CONFIG_PATH="/usr/local/opt/openblas/lib/pkgconfig"
export LDFLAGS="-L/usr/local/opt/lapack/lib"
export CPPFLAGS="-I/usr/local/opt/lapack/include"
export PKG_CONFIG_PATH="/usr/local/opt/lapack/lib/pkgconfig"

export LD_LIBRARY_PATH=/usr/local/opt/openblas:$LD_LIBRARY_PATH
export BLAS=/usr/local/opt/openblas/lib/libopenblas.a

为什么 cmake 在 macOS 上找不到 BLAS?谢谢!

解决方法

您需要将 /usr/local/opt/lapack/usr/local/opt/openblas 添加到 CMAKE_PREFIX_PATH,如下所示:

$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_PREFIX_PATH="/usr/local/opt/lapack;/usr/local/opt/openblas"

Homebrew 不会将它们符号链接到 /usr/local 以避免与 Apple 自己的 Accelerate.framework BLAS 实现发生冲突。在 Homebrew 的说法中,这样的包被称为“keg-only”。

您还应该取消设置所有的环境变量,因为 CMake 负责设置包含和库路径。

感兴趣的文档链接:

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...