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

时间:2012-03-09 03:26:19

标签: 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。

5 个答案:

答案 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中的项目链接路径中添加链接库库路径。 然后,重建你的项目,错误就消失了。