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

Windows下VCPKG+CMake配置BLAS失败:如何解决找不到库问题?

Windows下CMake+VCPKG链接BLAS库失败的排查与解决

环境配置

  • Windows 10
  • CMake 3.26
  • Microsoft Visual Studio 2022
  • Intel oneAPI
  • VCPKG

操作流程

  1. 克隆并初始化VCPKG:
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg && bootstrap-vcpkg.bat
set "VCPKG_ROOT=C:\path\to\vcpkg"
  1. 创建CMakeLists.txt:
cmake_minimum_required(VERSION 3.15)
project(test Fortran)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /Qipo /O3 /MP /Qdiag-disable:10448 /Qdiag-disable:warn")
find_package(BLAS REQUIRED)
  1. 创建CMakePresets.json:
{
  "version": 2,
  "configurePresets": [
    {
      "name": "default",
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/build",
      "cacheVariables": {
        "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
      }
    }
  ]
}
  1. 执行构建脚本:
SET "PATH=C:\Windows\System32\;C:\Windows\System32\WindowsPowerShell\v1.0\;%VCPKG_ROOT%;"
CALL "C:\Program Files (x86)\Intel\oneAPI\setvars.bat"

RMDIR /S /Q build
DEL vcpkg.json vcpkg-configuration.json
vcpkg new --application
vcpkg add port blas
cmake --preset=default

错误信息

CMake Error at C:/Program Files/Microsoft Visual Studio/2022/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.26/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find BLAS (missing: BLAS_LIBRARIES)
Call Stack (most recent call first):
  C:/Program Files/Microsoft Visual Studio/2022/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.26/Modules/FindBLAS.cmake:1346 (find_package_handle_standard_args)
  build/vcpkg_installed/x64-windows/share/blas/vcpkg-cmake-wrapper.cmake:7 (_find_package)
  C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake:813 (include)
  CMakeLists.txt:12 (find_package)

已尝试直接在命令行和CMakeLists.txt中指定CMAKE_TOOLCHAIN_FILE,问题未解决。

核心疑问

当前配置下如何成功找到并链接BLAS库?哪些环节可能遗漏或出错?


可行解决方向

1. 安装具体BLAS实现而非虚拟端口

VCPKG的blas是虚拟端口,仅作为抽象层,需指定具体实现(如openblas、intel-mkl)。修改构建脚本中的安装命令:

# 安装OpenBLAS
vcpkg add port openblas
# 或安装Intel MKL版本的BLAS
vcpkg add port intel-mkl

重新执行cmake配置即可。

2. 改用VCPKG的CONFIG模式查找库

CMake自带的FindBLAS模块可能与VCPKG的配置冲突,在CMakeLists.txt中替换查找方式:

cmake_minimum_required(VERSION 3.15)
project(test Fortran)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /Qipo /O3 /MP /Qdiag-disable:10448 /Qdiag-disable:warn")
# 使用CONFIG模式直接查找VCPKG安装的BLAS配置
find_package(blas CONFIG REQUIRED)

3. 隔离Intel oneAPI环境影响

Intel oneAPI的环境脚本可能覆盖BLAS相关变量,导致CMake优先查找Intel自带库。可尝试:

  • 调整脚本执行顺序:先初始化VCPKG,再调用Intel oneAPI的setvars.bat
  • 或在CMake中显式指定VCPKG安装的BLAS路径:
set(BLAS_ROOT "${CMAKE_CURRENT_BINARY_DIR}/vcpkg_installed/x64-windows")
find_package(BLAS REQUIRED)

4. 明确VCPKG三元组

确保系统架构与VCPKG目标三元组匹配,在CMakePresets.json中添加三元组指定:

{
  "version": 2,
  "configurePresets": [
    {
      "name": "default",
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/build",
      "cacheVariables": {
        "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
        "VCPKG_TARGET_TRIPLET": "x64-windows"
      }
    }
  ]
}

5. 直接链接VCPKG导出的目标

找到BLAS目标后,在CMake中直接链接到你的可执行文件:

# 假设你的可执行目标名为test
add_executable(test your_source.f90)
target_link_libraries(test PRIVATE blas::blas)

内容的提问来源于stack exchange,提问作者Foad S. Farimani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:30:27