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

Windows+VS2019编译CGAL示例时无法找到Boost program_options组件求助

解决Windows下VS2019编译CGAL示例时Boost Program Options组件找不到的问题

问题描述

在Windows系统使用VS2019编译CGAL的Ridges_3_Examples示例程序时,出现错误:

Could NOT find Boost: missing: program_options (已找到F:/boost_1_81_0/boostmake/lib/cmake/Boost-1.81.0/BoostConfig.cmake,版本为1.81.0)
NOTICE: 本项目需要Boost Program Options组件,将无法编译。

项目CMake脚本如下:

# 这是用于编译CGAL应用程序的CMake脚本
cmake_minimum_required(VERSION 3.1...3.23)
project(Ridges_3_Examples)

find_package(CGAL REQUIRED)
find_package(Eigen3 3.1.0 QUIET) #(要求版本3.1.0或更高)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
  # 链接Boost.ProgramOptions(可选)
  find_package(Boost COMPONENTS program_options)
  if(Boost_PROGRAM_OPTIONS_FOUND)
    create_single_source_cgal_program(Compute_Ridges_Umbilics.cpp)
    target_link_libraries(Compute_Ridges_Umbilics PUBLIC CGAL::Eigen3_support)
    create_single_source_cgal_program(Ridges_Umbilics_SM.cpp)
    target_link_libraries(Ridges_Umbilics_SM PUBLIC CGAL::Eigen3_support)
    create_single_source_cgal_program(Ridges_Umbilics_LCC.cpp)
    target_link_libraries(Ridges_Umbilics_LCC PUBLIC CGAL::Eigen3_support)

    add_definitions("-DCGAL_USE_BOOST_PROGRAM_OPTIONS")
    if(TARGET Boost::program_options)
      target_link_libraries(Compute_Ridges_Umbilics PRIVATE Boost::program_options)
      target_link_libraries(Ridges_Umbilics_SM PRIVATE Boost::program_options)
      target_link_libraries(Ridges_Umbilics_LCC PRIVATE Boost::program_options)
    else()
      target_link_libraries(Compute_Ridges_Umbilics PRIVATE ${Boost_PROGRAM_OPTIONS_LIBRARY})
      target_link_libraries(Ridges_Umbilics_SM PRIVATE ${Boost_PROGRAM_OPTIONS_LIBRARY})
      target_link_libraries(Ridges_Umbilics_LCC PRIVATE ${Boost_PROGRAM_OPTIONS_LIBRARY})
    endif()
  else()
    message("NOTICE: 本项目需要Boost Program Options组件,将无法编译。")
  endif()
else()
  message("NOTICE: 本项目需要Eigen 3.1(或更高版本),将无法编译。")
endif()

启用set(Boost_DEBUG ON)后的调试输出显示,CMake已找到Boost 1.81.0的配置文件,也定位到了boost_program_options的CMake配置目录,但扫描库文件时所有库项都标记为空([ ]),最终判定找不到该组件:

正在选择Windows SDK版本10.0.16299.0以适配Windows 10.0.22000。
C编译器标识为MSVC 19.29.30145.0
CXX编译器标识为MSVC 19.29.30145.0
检测C编译器ABI信息
检测C编译器ABI信息 - 完成
检查可用的C编译器:C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - 跳过
检测C编译特性
检测C编译特性 - 完成
检测CXX编译器ABI信息
检测CXX编译器ABI信息 - 完成
检查可用的CXX编译器:C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - 跳过
检测CXX编译特性
检测CXX编译特性 - 完成
未找到Visual Leak Detector (VLD)。
使用仅头文件版本的CGAL
目标为Visual Studio 16 2019
目标构建环境支持自动链接
使用VC工具集142。
生成器使用中间配置目录:$(Configuration)
找到GMP:debug;F:/CGAL-5.5.1/auxiliary/gmp/lib/libgmp-10.lib;optimized;F:/CGAL-5.5.1/auxiliary/gmp/lib/libgmp-10.lib  
找到MPFR:F:/CGAL-5.5.1/auxiliary/gmp/lib/libmpfr-4.lib  
找到Boost:F:/boost_1_81_0/boostmake/lib/cmake/Boost-1.81.0/BoostConfig.cmake(找到合适版本"1.81.0",最低要求为"1.66")  
Boost头文件目录:F:/boost_1_81_0/boostmake/include/boost-1_81
Boost库:    
执行测试CMAKE_HAVE_LIBC_PTHREAD
执行测试CMAKE_HAVE_LIBC_PTHREAD - 失败
在pthreads中查找pthread_create
在pthreads中查找pthread_create - 未找到
在pthread中查找pthread_create
在pthread中查找pthread_create - 未找到
找到Threads:TRUE  
在F:/boost_1_81_0/boostmake/lib/cmake/Boost-1.81.0找到Boost 1.81.0
  请求的配置:QUIET COMPONENTS program_options
BoostConfig: find_package(boost_headers 1.81.0 EXACT CONFIG  QUIET HINTS F:/boost_1_81_0/boostmake/lib/cmake)
BoostConfig: find_package(boost_program_options 1.81.0 EXACT CONFIG  QUIET HINTS F:/boost_1_81_0/boostmake/lib/cmake)
在F:/boost_1_81_0/boostmake/lib/cmake/boost_program_options-1.81.0找到boost_program_options 1.81.0
Boost工具集为vc142(MSVC 19.29.30145.0)
扫描F:/boost_1_81_0/boostmake/lib/cmake/boost_program_options-1.81.0/libboost_program_options-variant*.cmake
  包含F:/boost_1_81_0/boostmake/lib/cmake/boost_program_options-1.81.0/libboost_program_options-variant-vc142-mt-gd-x32-1_81-static.cmake
  [ ] libboost_program_options-vc142-mt-gd-x32-1_81.lib
  包含F:/boost_1_81_0/boostmake/lib/cmake/boost_program_options-1.81.0/libboost_program_options-variant-vc142-mt-gd-x64-1_81-static.cmake
  [ ] libboost_program_options-vc142-mt-gd-x64-1_81.lib
  包含F:/boost_1_81_0/boostmake/lib/cmake/boost_program_options-1.81.0/libboost_program_options-variant-vc142-mt-x32-1_81-static.cmake
  [ ] libboost_program_options-vc142-mt-x32-1_81.lib
  包含F:/boost_1_81_0/boostmake/lib/cmake/boost_program_options-1.81.0/libboost_program_options-variant-vc142-mt-x64-1_81-static.cmake
  [ ] libboost_program_options-vc142-mt-x64-1_81.lib
无法找到Boost:缺少program_options组件(已找到F:/boost_1_81_0/boostmake/lib/cmake/Boost-1.81.0/BoostConfig.cmake,版本为"1.81.0")
NOTICE: 本项目需要Boost Program Options组件,将无法编译。
配置完成(5.9s)

解决方案

1. 确认Boost是否实际生成了program_options组件

从调试输出看,CMake能找到program_options的配置文件,但库项为空,说明编译Boost时可能未生成该组件的库文件:

  • 打开F:/boost_1_81_0/boostmake/lib目录,检查是否存在libboost_program_options-vc142-mt-gd-x64-1_81.lib、libboost_program_options-vc142-mt-x64-1_81.lib等对应工具集(vc142)、架构(x64/x32)的库文件。
  • 若不存在,重新编译Boost:
    1. 打开VS2019的「x64 Native Tools Command Prompt」(对应目标架构)。
    2. 切换到Boost根目录,执行bootstrap.bat生成b2工具。
    3. 执行编译命令,明确指定编译program_options组件:
      b2 toolset=msvc-14.2 address-model=64 --with-program_options install --prefix=F:/boost_1_81_0/boostmake
      
      (address-model=64对应x64架构,若编译x32则改为32;toolset=msvc-14.2对应VS2019的工具集)

2. 手动指定Boost库目录和组件类型

如果库文件存在但CMake无法识别,可在CMake脚本中手动配置:
修改CMake中find_package(Boost)的部分:

# 明确使用Boost静态库
set(Boost_USE_STATIC_LIBS ON)
# 指定Boost库目录
set(Boost_LIBRARY_DIR F:/boost_1_81_0/boostmake/lib)
find_package(Boost COMPONENTS program_options REQUIRED)

3. 检查架构与工具集一致性

VS2019项目的架构和工具集必须与Boost编译版本匹配:

  • 右键项目→属性→配置属性→常规,确认「平台工具集」为v142(对应Boost的vc142工具集)。
  • 确认项目架构(x64/x32)与Boost编译的架构一致。

4. 清理CMake缓存后重新配置

删除项目的CMakeCache.txt和CMake生成的中间目录,重新运行CMake配置,避免缓存导致的识别问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:54:51