VS2019调试版编译报错找不到libboost_date_time库,咨询Boost编译参数
问题描述
编译调试版项目时触发链接错误:
LINK : fatal error LNK1104: cannot open file "libboost_date_time-vc142-mt-gd-x64-1_72.lib"
但Release版本编译正常,且调试版与Release版本的项目设置完全一致。
查看Boost库文件夹,发现存在的对应文件是:
libboost_date_time-vc142-mt-sgd-x64-1_72.lib
即编译生成的库文件名比项目需要的多了一个s前缀。当前使用的Boost编译命令为:
b2.exe -j4 toolset=msvc-14.2 address-model=64 architecture=x86 link=static threading=multi runtime-link=static --build-type=complete --build-dir=build\x64 stage
问题原因
文件名里的s代表Boost库是静态链接C++运行时库编译的,而项目调试版默认寻找的gd后缀库是动态链接C++运行时库的调试版本。你当前的编译参数里指定了runtime-link=static,所以Boost只生成了静态运行时的库文件,缺少项目需要的动态运行时调试库。
解决方案
有两种可行的解决方式,选一种即可:
方式一:调整Boost编译参数,生成动态运行时的库
把编译命令里的runtime-link=static改成runtime-link=shared,或者直接删除这个参数(因为--build-type=complete会自动生成所有运行时链接类型的库)。修改后的命令示例:
b2.exe -j4 toolset=msvc-14.2 address-model=64 architecture=x86 link=static threading=multi runtime-link=shared --build-type=complete --build-dir=build\x64 stage
重新编译后,就会生成不带s的gd后缀调试库,匹配项目的需求。
方式二:修改项目调试版的运行库设置
打开项目属性,依次进入C/C++ -> 代码生成 -> 运行库,将调试版的选项改为多线程调试(/MTd)。这样项目会自动寻找带sgd后缀的Boost库,和你已编译好的文件匹配。
内容的提问来源于stack exchange,提问作者RomanShan
相关产品推荐
相关产品推荐

