You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arch Linux下CMake 3.10无法检测BLAS库,配置问题求助

解决CMake 3.10在Arch Linux下无法检测BLAS库的问题

针对你遇到的CMake无法调用BLAS库、卡在CHECK_FORTRAN_FUNCTION_EXISTS宏检测sgemm函数的问题,结合Arch Linux的环境特性,我整理了几个针对性的排查和解决步骤:

1. 先确认BLAS库的实际状态

Arch Linux通过pacman安装的BLAS通常是openblas包,先手动验证库文件是否存在且路径正确:

ls /usr/lib/libblas.so /usr/lib/libopenblas.so

正常情况下libblas.so是指向libopenblas.so的软链接,确保这两个文件都存在。

2. 手动给CMake指定BLAS库路径

CMake 3.10版本对Arch Linux的库布局支持不够完善,你可以直接跳过自动检测,手动指定BLAS库路径:

方式一:运行CMake时传参数

cmake .. -DBLAS_LIBRARIES=/usr/lib/libopenblas.so

方式二:修改CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(Test C Fortran)
# 提前指定BLAS库路径
set(BLAS_LIBRARIES /usr/lib/libopenblas.so)
find_package(BLAS REQUIRED)

3. 排查链接器(ld)的配置问题

如果怀疑是ld路径配置问题,先检查ld的默认搜索路径是否包含/usr/lib:

ld --verbose | grep SEARCH_DIR

如果/usr/lib不在列表里,临时设置环境变量后重新运行CMake:

export LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH
cmake ..

4. 手动验证BLAS与Fortran编译器的兼容性

CMake检测失败可能是Fortran编译器和BLAS库的链接兼容性问题,写个简单的测试程序手动验证:

program test_blas
  external sgemm
  call sgemm('N', 'N', 1, 1, 1, 1.0, [1.0], 1, [1.0], 1, 0.0, [0.0], 1)
  print *, "BLAS sgemm调用成功"
end program test_blas

编译运行:

gfortran test_blas.f90 -o test_blas -lblas
./test_blas

如果能正常输出,说明库本身没问题,问题出在CMake的老旧检测逻辑上。

5. 升级CMake版本(推荐)

CMake 3.10是比较旧的版本,对BLAS的检测逻辑已经过时,Arch Linux仓库里的CMake版本要新很多,升级后大概率能解决问题:

sudo pacman -S cmake

用新版本重新运行CMake检测即可。


内容的提问来源于stack exchange,提问作者Jiri Kolar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:50:38