VS2013 32位环境CGAL配置:CMake无法识别带x32后缀的Boost库
解决CMake无法识别带x32后缀的Boost静态库问题
这个问题在配置CGAL时挺常见的,核心原因是CMake的Boost查找模块默认的库命名规则,和你编译/下载的带x32后缀的Boost库不匹配。下面给你几个可行的解决方案:
方案1:让CMake适配带x32后缀的库文件
你可以直接在CMake中指定Boost库的后缀,让它搜索带x32的版本:
- 如果用CMake GUI:在"Add Entry"中添加新变量
Boost_LIB_SUFFIX,类型设为STRING,值填-x32,然后重新点击"Configure"。 - 如果用CMake命令行:运行cmake时追加参数:
cmake -DBOOST_ROOT=C:/dev/libboost_1_67_0/ -DBOOST_LIBRARYDIR=C:/dev/libboost_1_67_0/lib32-msvc-12.0 -DBoost_LIB_SUFFIX=-x32 .. - 或者直接在项目的CMakeLists.txt中添加配置:
set(Boost_LIB_SUFFIX "-x32") find_package(Boost REQUIRED COMPONENTS thread system)
方案2:重新编译Boost,生成不带x32后缀的库
调整你的b2编译命令,通过指定布局参数让生成的库名符合CMake的预期。修改后的编译命令如下:
b2 toolset=msvc-12.0 variant=debug,release link=static runtime-link=static threading=single,multi address-model=32 --layout=tagged --prefix=C:\boost_1_67_0\build install
这里的关键参数作用:
address-model=32:明确指定编译32位版本,避免Boost自动添加x32后缀--layout=tagged:使用Boost的标记式布局,库名会包含编译器、线程信息,但不会额外添加地址模型类的后缀
方案3:手动重命名/创建符号链接(应急方案)
如果不想重新编译或修改CMake配置,最简单的应急方法是手动调整库文件名,匹配CMake的搜索规则:
- 进入你的Boost库目录
C:/dev/libboost_1_67_0/lib32-msvc-12.0 - 对应每个带
x32后缀的库文件,复制并重命名:- Release版:
libboost_thread-vc120-mt-x32-1_67.lib→libboost_thread-vc120-mt-1_67.lib - Debug版:
libboost_thread-vc120-mt-gd-x32-1_67.lib→libboost_thread-vc120-mt-gd-1_67.lib
- Release版:
- 注意要严格对应debug和release版本的
-gd标记,不要混改
以上三种方案都能解决CMake找不到Boost静态库的问题,推荐优先用方案1或方案2,方案3适合临时应急场景。
内容的提问来源于stack exchange,提问作者sergio campo
相关产品推荐
相关产品推荐

