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

编译安装deal.II 9.5.0-pre时BLAS/LAPACK符号检查失败求助

解决deal.II 9.5.0-pre编译时BLAS/LAPACK符号检查失败的问题

根据你提供的CMakeError.log信息,问题核心是链接阶段缺失依赖库,而非BLAS/LAPACK本身未安装,以下是针对性解决建议:

1. 补全pthread与Fortran链接依赖

日志中出现pthread_setaffinity_np和_gfortran_concat_string未定义引用,说明CMake在检查BLAS/LAPACK时,没有自动链接pthread线程库和gfortran运行时库。修改CMake命令,在LAPACK_LIBRARIES中补充这两个库:

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/dealII \
-DDEAL_II_WITH_UMFPACK=ON \
-DDEAL_II_WITH_LAPACK=ON \
-DLAPACK_LIBRARIES="/usr/local/lib64/liblapack.a;/usr/local/lib64/libblas.a;/usr/lib64/libpthread.so;/usr/lib64/libgfortran.so" \
-DDEAL_II_WITH_MKL=OFF \
./..

如果优先使用系统的OpenBLAS(路径/usr/lib64/libopenblas.so),可以替换手动指定的blas/lapack库——OpenBLAS通常已内置pthread支持:

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/dealII \
-DDEAL_II_WITH_UMFPACK=ON \
-DDEAL_II_WITH_LAPACK=ON \
-DBLAS_LIBRARIES="/usr/lib64/libopenblas.so" \
-DLAPACK_LIBRARIES="/usr/lib64/liblapack.so" \
-DCMAKE_EXE_LINKER_FLAGS="-lpthread -lgfortran" \
-DDEAL_II_WITH_MKL=OFF \
./..

2. 禁用MKL检测

日志提到MKL_SYMBOL_CHECK因缺少mkl.h失败,说明CMake默认尝试检测MKL但你并未安装。显式关闭MKL支持,避免干扰BLAS/LAPACK的检测流程:

-DDEAL_II_WITH_MKL=OFF

3. 让CMake自动查找BLAS/LAPACK(推荐)

不要手动硬编码库路径,利用CMake自带的FindBLAS/FindLAPACK模块自动查找,同时指定BLAS供应商为OpenBLAS:

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/dealII \
-DDEAL_II_WITH_UMFPACK=ON \
-DDEAL_II_WITH_LAPACK=ON \
-DBLA_VENDOR=OpenBLAS \
-DCMAKE_EXE_LINKER_FLAGS="-lpthread -lgfortran" \
-DDEAL_II_WITH_MKL=OFF \
./..

4. 验证库依赖完整性

手动检查你指定的BLAS/LAPACK库是否依赖其他库:

# 静态库用nm查看符号
nm /usr/local/lib64/libblas.a | grep pthread_setaffinity_np
# 动态库用ldd查看依赖
ldd /usr/lib64/libopenblas.so

如果静态库确实依赖pthread,必须在CMake中显式链接对应的库文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:02:22