在我的程序在发布模式下链接到boost :: filesystem模块的过程中,我得到了下一个错误:
错误LNK1104:无法打开文件 'libboost_filesystem-VC100-MT-S-1_49.lib'
但是,在boost \ stage \ lib目录中,我只有下一个库引用文件系统模块:
libboost_filesystem-VC100-MT-1_49.lib
libboost_filesystem-VC100-MT-GD-1_49.lib
我的问题是:
为什么VC ++要求'libboost_filesystem-vc100-mt-s-1_49.lib?
我应该更改哪些编译器/链接属性以使编译器要求libboost_filesystem-vc100-mt-1_49.lib?
更新:我的VC2010 ++解决方案有2个项目,包括之前的boost库:x是一个库,y是(主程序)调用x。
答案 0 :(得分:29)
您在C/C++/Code Generation/Runtime Library
中使用/ MT或/ MTd选项需要静态库,使用共享库输出来提升默认构建。您可以将Runtime Library
切换为/ MD或/ MDd。另一个选择是使用静态库输出重新编译boost,你会得到'libboost_filesystem-vc100-mt-s-1_49.lib'..
答案 1 :(得分:19)
我最近的一个项目遇到了类似的问题(继承了很久的遗产)。
以下是此问题的“穷人的”解决方案:
使用 所有 变体重建boost库,以确保您拥有符合需求的正确变体。
运行:
.\b2 --build-type=complete
请注意,使用此选项时,提升构建时间显然会更长。
这不是一个优雅的解决方案,但我没有时间搞清楚我的项目需要哪个确切的选项,所以我只是建立了它们。
答案 2 :(得分:6)
您可以将以下字符粘贴到控制台中(win + r ---- cmd,然后转到boost src目录,找到bjam.exe) ps:双击bootstrap.bat可以获取bjam.exe
bjam --toolset=msvc-1.0 --stagedir=./lib_x64 --builddir=./ address-model=32 link=static variant=release runtime-link=static threading=multi stage debug releasde
libboost_filesystem-vc100-mt-s-1_49.lib
"link=static" correspond to -s-
"threading=multi" correspond to -mt-
"runtime-link=static" correspond to lib prefix
"variant=release" make sure libboost_filesystem-vc100-mt-s-1_49.lib don't contain -gd-
答案 3 :(得分:2)
boost\stage\lib directory
中的boost库动态链接到标准C ++库。请参阅以下帖子:
boost lib build configuraton variations
您的代码静态链接到标准C ++库,因此不匹配。尝试将代码动态链接到标准库。 (项目设置 - >常规 - >配置类型)
答案 4 :(得分:1)
在VS2013 x86 Native Tools命令提示符下运行以下命令重建静态提升。
b2 -link=static
在VS中的项目链接路径中添加链接库库路径。 然后,重建你的项目,错误就消失了。