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
相关产品推荐
相关产品推荐

