致命错误LNK1104:无法打开文件'libboost_system-vc110-mt-gd-1_51.lib'


88

似乎我无法使用它。我做了一个简单的控制台应用程序(取决于websocket++库),它需要Boost库..但是当我尝试编译时,我得到了:

致命错误LNK1104:无法打开文件'libboost_system-vc110-mt-gd-1_51.lib'

但是,我做了bjam,在其中创建了lib,(boost_root)/stage/libs然后将lib的路径链接到了编译器C++/Additionnals includes

如果我看(boost_root)/stage/libs文件 libboost_system-vc110-mt-gd-1_51.lib不在那儿。它被称为libboost_system-vc110-mt-sgd-1_51.lib

任何的想法?


1
我已经能够构建libboost_system-vc110-mt-gd-1_51.lib文件,并使用bjam进行完整构建,但是我仍然收到错误消息。
鲁西诺

22
打开VS2012 developer command prompt,进入boost根目录并键入bootstrap,然后键入b2,您将获得一整套库文件。
杰西·古德

您是否将包含路径和链接器路径添加到项目中?
杰西·古德

1
您正在使用构建应用程序/MD吗?
Mahesh 2012年

如果可以下载而不是进行编译,请从此处获取库:code.ingres.com/boostlib/trunk/stage/lib
gorogm

Answers:


93

C ++→常规→附加包含目录参数是列出目录编译器将头文件搜索。

您需要告诉链接器在何处查找要链接的库。要访问此设置,请在“解决方案资源管理器”窗口中右键单击项目名称,然后在属性→链接器→常规→其他库目录上单击鼠标右键。<boost_path>\stage\lib在此处输入(如果使用默认选项构建Boost,这是库所在的路径)。


您能解释一下什么是boost_path
ggsmartboy

1
@ggsmartboy这是增强源文件所在的路径(您在编译器中列出的相同路径包括路径,以便可以找到增强头文件)。答案假定您使用默认构建选项构建了自己的增强版(不使用发行版)。
Praetorian

太棒了 也使我免于头痛。为什么我似乎无法在boost文档中发现这一点(即使在那里),我也不知道!:)
absentmindeduk 2014年

2
如果右键单击项目并选择属性,则会找到此答案中提到的设置(对于像我这样的菜鸟,右键单击解决方案,转到“工具”>“选项”等。尽管这些选项在我的所有项目中都没有出现)。VS2013
Mr_and_Mrs_D 2015年

1
@Mr_and_Mrs_D是的,我确实假设读者知道那部分。更新。
Praetorian 2015年

97

对于像我这样的业余爱好者,他们自己学习C ++是最简单的方法:

首先将boost库解压缩到您选择的任何目录。我推荐c:\directory

  1. 打开您的可视C ++。
  2. 创建一个新项目。
  3. 右键单击该项目。
  4. 单击属性。
  5. 单击C / C ++。
  6. 单击常规。
  7. 选择其他包含库。
  8. 包括库目的地。例如c:\boost_1_57_0
  9. 单击预编译头。
  10. 单击创建/使用预编译头。
  11. 选择不使用预编译头。

如果遇到问题,请转到链接库。

  1. 前往提取的档案为c:\boost_1_57_0
  2. 单击booststrap.bat(不要在命令窗口上打扰,只需等待,不要关闭该窗口,这是我遇到的问题,这个问题花了我两个星期的时间。一段时间后,booststrap它将运行并生成相同的文件,但现在有了两个不同的名称:b2bjam
  3. 单击b2并等待其运行。
  4. 单击bjam并等待其运行。然后将产生一个名为的文件夹stage
  5. 右键单击该项目。
  6. 单击属性。
  7. 单击链接器。
  8. 单击常规。
  9. 单击包括其他库目录。
  10. 选择库的一部分,例如c:\boost_1_57_0\stage\lib

而且你很好!


3
非常感谢Wu Jie-我之前从未做过类似的事情,而这些步骤正是我构建Boost并生成丢失的'libboost_serialization-vc140-mt-gd-1_57.lib'库文件所需的,我在链接时遇到了麻烦: )
Vixxd 2015年

5
谢谢,我喜欢很好的详细说明。对于设置Boost的步骤2/3/4,我做的是:a)以root身份打开命令行提示符;b)转到boost_1_57_0目录;c)类型bootstrap.bat(花了10到20秒);d)./b2按照指示输入(然后花费30-40分钟完成)。
达伦·库克

1
我必须使用Visual Studio命令提示符打开bootstrap.bat,因为常规命令提示符不知道如何处理“ cl”命令。
jlaverde

2018年2月20日,您的​​解决方案对我有效(VS2017 + Boost 1.66)。非常感谢。
CaTx

感谢您为初学者准备的步骤。希望每个人都能像您一样给与答案。
Mudit Jain

6

我有同样的问题。这是因为我使用Visual C ++ 2010(v100)编译了Boost,并且尝试错误地将Visual Studio 2012(v110)与库一起使用。

因此,我更改了配置(在Visual Studio 2012中),转到项目属性->常规-> Plataform Toolset,并将值从Visual Studio 2012(v110)更改为Visual Studio 2010(v100)


7
我希望您认识到,将平台工具集更改为使用v100时,是在告诉VS2012 IDE使用VS2010附带的编译器。VS2012编译器中添加的所有C ++ 11功能将不可用。更好的解决方案是使用VS2012编译器编译Boost。您可以将2010年和2012年生成的库共存,因为Boost将编译器版本号放入输出文件名中。
Praetorian

您说得对,我知道。我担心如果升级库和编译器会发生什么。因此,当项目完成时,我将修复所有这些问题。谢谢!
Jota Santos

6

另一个解决方案:

我很困惑,因为我在我的Link-> Additional Dependencies属性中包含了boost_regex-vc120-mt-gd-1_58.lib,但是该链接不断告诉我它无法打开libboost_regex-vc120-mt-gd-1_58.lib(请注意lib前缀)。我没有指定libboost_regex-vc120-mt-gd-1_58.lib。

我试图使用(并已构建)boost动态库(.dll),但是没有定义BOOST_ALL_DYN_LINK宏。显然在编译中有暗示要包含一个库,如果没有BOOST_ALL_DYN_LINK,它将寻找静态库(带有lib前缀),而不是动态库(没有lib前缀)。


仍然只有1个投票,但我每隔几个月就会发现自己在这里,再次提醒我解决问题的办法!!
尼尔·盖特比

3

我有同样的问题,我的错误是我安装了二进制boost_1_55_0-msvc-11.0-32.exe以与Visual c ++ 2010一起使用,Visual C ++ 2010的版本为v100(项目属性-> ConfiguratioProperties-> General-> platformTooset)而不是v110就像Visual C ++2012。所以我下载了boost_1_55_0-msvc-10.0-32.exe,现在到目前为止一切正常。


2

如果您在构建boost时遇到麻烦或不想这样做,可以从SourceForge下载lib文件。该链接会将您带到1.51版的压缩lib和dll文件文件夹。但是,您应该能够编辑链接以指定选择的版本。显然,BoostPro的安装程序存在一些问题。


2

尝试在Visual Studio 2015(社区版)中使用增强单元测试时,我遇到了类似的问题:

致命错误LNK1104:libboost_unit_test_framework-vc140-mt-1_57

所以我想分享我的解决方案。

您可以通过以下两种方法创建增强型单元测试项目(该解决方案对两种方法都适用):

  1. 使用Boost单元测试适配器
  2. 或通过创建Win32控制台应用程序(此处为步骤),然后将主功能替换为增强型单元测试功能(此处为步骤)。

这是我使两个项目都能正常工作的步骤:

首先,下载所需的增强版本(例如,boost_1_57_0)。您可以使用正确的二进制文件(使用msvc v140编译)下载boost,也可以通过在命令行中运行以下命令自己提取二进制文件:

  1. bootstrap.bat
  2. “ C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat” x86
  3. bjam-干净
  4. bjam -j4-调试符号=上--build-type =完整的工具集= msvc-14.0线程化=多个运行时链接=共享的地址模型= 32

其中msvc-14.0指定我们需要Visual Studio 2015版本(VS 2015 = v14.0 = v140),并且address-model = 32指定我们需要平台32(但对于64位也可以这样做)。

拥有二进制文件后,转到Visual Studio,选择已创建的Boost Unit Testing项目。转到项目属性>配置(从主菜单)并进行以下选择:

  • 将“常规>平台工具集”设置为Visual Studio 2015(v140)。

  • 在以下位置包括boost文件夹的路径(例如C:\ boost_1_57_0)和包含二进制文件的子文件夹的路径(例如C:\ boost_1_57_0 \ stage \ lib)。

    • C \ C ++>其他包含目录
    • 和“链接器>其他库目录”。

1

b2 -j%cores%工具集=%msvcver%地址模型= 64体系结构= x86链接=静态线程化=多个运行时链接=共享--build-type =最小阶段--stagedir = stage / x64

属性→链接器→常规→其他库目录$ {BOOST)\ stage \ x64 \ lib


进一步说明这些行在做什么以及为什么->将有助于提高此答案的质量。
安东·孟肖夫

0

我在这里报告了同样的问题。我解决了将mainTest.cpp从子文件夹src / mainTest /移至主文件夹src /的问题,我想这也是您的问题。


0

2>LINK : fatal error LNK1104: cannot open file 'libboost_regex-vc120-mt-sgd-1_55.lib

就我而言,在旧的继承项目上,bootstrap / bjam不可用(库已预编译并提交到SCM)。图书馆没有VC或提振其文件名如版本:libboost_regex-mt-sgd.lib但是Processed /DEFAULTLIB:libboost_regex-vc120-mt-sgd-1_55.lib以某种方式自动触发。

通过手动将非版本文件名添加到:

<AdditionalDependencies>$(DK_BOOST)\lib64\libboost_regex-mt-sgd.lib</AdditionalDependencies>

而在黑名单...vc120-mt-sgd-1_55.lib

<IgnoreSpecificDefaultLibraries>libboost_regex-vc120-mt-sgd-1_55.lib</IgnoreSpecificDefaultLibraries>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.