Boost 1.66.0编译后CMake无法找到指定Boost库求助
看起来你已经正确编译了Boost 1.66.0的库,但由于CMake 3.10版本的FindBoost模块特性,加上Windows环境下的路径和命名匹配问题,导致它没能识别到stage目录里的库。试试下面这些针对性的解决方案:
明确指定Boost的根目录和库路径
旧版本CMake的FindBoost模块可能无法自动探测到Boost位置,你需要在CMakeLists.txt中显式设置路径,或者通过CMake命令行参数传递:
在CMakeLists.txt中添加:# 设置Boost根目录(替换成你实际的Boost解压路径) set(BOOST_ROOT "C:/boost_1_66_0") # 指定编译后的库所在目录 set(BOOST_LIBRARYDIR "${BOOST_ROOT}/stage/lib") # 启用静态库查找 set(Boost_USE_STATIC_LIBS ON) # 确保查找多线程版本(Boost默认编译的是多线程库) set(Boost_USE_MULTITHREADED ON) # 查找需要的组件 find_package(Boost REQUIRED COMPONENTS system filesystem thread locale date_time)或者在运行CMake时用命令行参数(更适合临时测试):
cmake .. -G "Visual Studio 15 2017 Win64" -DBOOST_ROOT="C:/boost_1_66_0" -DBOOST_LIBRARYDIR="C:/boost_1_66_0/stage/lib" -DBoost_USE_STATIC_LIBS=ON确保CMake使用x64生成器
你编译的是64位Boost库(address-model=64),所以必须让CMake生成x64的项目。运行CMake时一定要指定-G "Visual Studio 15 2017 Win64",否则CMake默认会找32位库,自然找不到你编译的64位版本。验证库文件名是否匹配CMake的预期
检查stage/lib目录下的库文件名,比如静态多线程版本的格式应该是libboost_system-vc141-mt-s-x64-1_66.lib(VS2017对应vc141)。如果你的库文件名符合这个格式,说明编译没问题;如果不符合,可能需要调整b2的编译参数,比如明确指定link=static(虽然--build-type=complete已经包含静态,但显式指定更保险):bootstrap .\b2 --build-dir=build toolset=msvc address-model=64 link=static --build-type=complete stage清理CMake缓存后重试
有时候旧的CMake缓存会残留错误的路径信息,导致新的设置不生效。删除build目录下的CMakeCache.txt和所有生成的文件,然后重新运行CMake命令。
如果以上步骤都试过还是不行,可以尝试升级CMake版本(比如到3.15+),新版本的FindBoost模块对Boost的支持更好,能减少很多兼容性问题。
内容的提问来源于stack exchange,提问作者Ammoun

