链接器错误LNK1104与'libboost_filesystem-vc100-mt-s-1_49.lib'

viz*_*yno 36 c++ boost

在发布模式下将程序链接到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.

  1. 当我使用Configuration type = Static library和RuntimeLibrary = Multi-threaded(/ MT)构建x时,它没问题.
  2. 当我使用Configuration type = Application(.exe)和RuntimeLibrary = Multi-threaded(/ MT)构建y时,它会发出我指示的错误,如果我更改为Configuration type = Static library它构建正常,但我的主程序有. lib扩展而不是预期的.exe.

sec*_*ask 30

您正在使用/ MT或/ MTd选项,C/C++/Code Generation/Runtime Library其中需要静态库,使用共享库输出来提升默认构建.您可以切换Runtime Library到/ MD或/ MDd.另一个选择是使用静态库输出重新编译boost,你会得到'libboost_filesystem-vc100-mt-s-1_49.lib'..


kal*_*yer 21

我最近的一个项目遇到了类似的问题(继承了很长的遗产).

这是这个问题的" 穷人 "解决方案:

使用所有变体重建boost库,以确保您具有满足您需求的正确变体.

跑:

.\b2 --build-type=complete
Run Code Online (Sandbox Code Playgroud)

请注意,使用此选项时,提升构建时间显然会更长.

这不是一个优雅的解决方案,但我没有时间搞清楚我的项目需要哪个确切的选项,所以我只是构建它们.


huo*_*yao 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-
Run Code Online (Sandbox Code Playgroud)