VS2015编译旧VS2010项目时链接器寻找VC100版本Boost.Python库问题
解决VS2015链接Boost.Python时错误寻找VC100库的问题
你碰到的这个LNK1104错误其实很常见——跨VS版本迁移项目+升级Boost库的组合,很容易触发工具集版本不匹配的问题。明明你的库路径里是VC140版本的Boost.Python库,链接器却死盯着VC100的找,核心原因就是项目里残留了旧的编译配置,或者Boost的自动链接逻辑被旧设置干扰了。下面给你几个一步步排查的解决方法:
1. 检查并修正Boost的自动链接宏设置
Boost.Python默认靠boost_python_auto_link宏自动推导要链接的库文件名,这个宏会根据当前编译器版本生成对应的后缀(比如VC140对应vc140)。但如果你的项目是从VS2010迁过来的,大概率残留了旧的宏定义:
- 打开项目属性 → C/C++ → 预处理器,看看有没有
BOOST_LIB_TOOLSET=vc100这种强制指定工具集的宏,如果有,直接改成BOOST_LIB_TOOLSET=vc140 - 要是嫌自动链接麻烦,也可以直接禁用它:添加预处理器宏
BOOST_PYTHON_NO_AUTO_LINK,然后去链接器 → 输入 → 附加依赖项里手动填你实际有的库文件名,比如libboost_python35-vc140-mt-gd-1_67.lib(注意要和你编译的Boost库版本、Python版本、Debug/Release、链接模式完全对应)
2. 确认项目的平台工具集是VS2015的v140
这步很容易被忽略——如果你的项目还是沿用VS2010的v100平台工具集,Boost的自动链接逻辑会直接推导成VC100的库:
- 右键项目 → 属性 → 常规 → 平台工具集,选择
Visual Studio 2015 (v140),别忘了检查解决方案里的所有子项目,确保工具集统一
3. 注意Boost.Python针对Python3的命名变化
从Boost 1.60左右开始,为了区分Python2和Python3的库,针对Python3的Boost.Python库文件名会带上Python版本号,比如libboost_python35-xxx,而Python2的是libboost_python-xxx。你需要确认:
- 预处理器里有没有正确定义
BOOST_PYTHON_VERSION=35,或者在包含<boost/python.hpp>之前指定好版本 - 链接时引用的库文件名要和你编译好的Boost库完全一致,比如Debug版带
-gd,Release版不带;-mt对应多线程静态链接模式
4. 清理VS项目缓存,避免旧设置残留
有时候VS的缓存文件会“记住”旧的配置,导致链接器抽风找错文件:
- 手动删掉项目目录下的
Debug/Release文件夹,还有.suo、.vcxproj.user这类缓存文件 - 选择菜单栏的“生成 → 重新生成解决方案”,别用增量构建,确保完全从头编译
要是试完这些还是不行,可以把你的Boost编译命令、项目的预处理器宏列表、链接器附加依赖项设置贴出来,方便进一步排查细节。
内容的提问来源于stack exchange,提问作者nickdmax
相关产品推荐
相关产品推荐

