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

Rus*_*ino 79 c++ boost

似乎我不能让这个工作.我创建了一个简单的控制台应用程序(依赖于websocket++库),它需要Boost库..但是当我尝试编译时,我得到:

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

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

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

任何的想法?

Pra*_*ian 87

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

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

  • 如果您右键单击_project_并选择属性(对于像我这样的菜鸟,请右键单击解决方案,转到“工具”&gt;“选项”等。这些选项并非在我所有的项目中都存在),则会找到此答案中提到的设置。VS2013 (2认同)

小智 87

对于像我这样自学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.

你很高兴去!

  • 谢谢,我喜欢很好的详细说明.对于设置提升的步骤2/3/4,我做的是:a)以root*打开命令行提示符*; b)切换到boost_1_57_0目录; c)键入`bootstrap.bat`(需要10-20秒); d)按照指示键入`./b2`(然后需要30-40分钟才能完成). (5认同)
  • 非常感谢吴杰 - 我之前从未做过这样的事情,这些步骤正是我需要构建Boost并生成缺少的'libboost_serialization-vc140-mt-gd-1_57.lib'库文件我无法链接: ) (3认同)
  • 我不得不使用 Visual Studio 命令提示符打开 ***bootstrap.bat***,因为常规命令提示符不知道如何处理“cl”命令。 (3认同)

小智 6

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

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

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

wdt*_*dtj 5

另一个解决方案:

我很沮丧,因为我在我的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前缀)。