95

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

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

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

如果我查看(boost_root)/stage/libs文件 libboost_system-vc110-mt-gd-1_51.lib不存在。而是调用它libboost_system-vc110-mt-sgd-1_51.lib

任何的想法?

4

12 回答 12

108

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

你很高兴去!

于 2015-04-10T17:28:40.973 回答
97

C++ → General → Additional Include Directories参数用于列出编译器将搜索头文件的目录。

您需要告诉链接器在哪里寻找要链接的库。要访问此设置,请右键单击解决方案资源管理器窗口中的项目名称,然后单击Properties → Linker → General → Additional Library Directories。在此处输入(如果您使用默认选项构建 Boost<boost_path>\stage\lib,这是库所在的路径)。

于 2012-10-24T03:42:03.013 回答
7

另一个解决方案:

我被难住了,因为我在 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 前缀)。

于 2016-02-24T16:38:34.427 回答
6

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

因此,我更改了配置(在 Visual Studio 2012 中)转到Project properties -> General -> Plataform Toolset并将值从Visual Studio 2012 (v110)更改为Visual Studio 2010 (v100)

于 2013-02-26T21:54:56.413 回答
3

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

于 2014-04-07T00:30:04.497 回答
3

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

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

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

您可以通过以下两种方式创建提升单元测试项目(并且此解决方案适用于两种方式):

  1. 使用Boost 单元测试适配器
  2. 或通过创建 Win32 控制台应用程序(此处的步骤),并用升压单元测试功能替换主功能(此处的步骤)。

以下是我为使这两个项目正常工作所遵循的步骤:

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

  1. 引导程序.bat
  2. "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86
  3. bjam --clean
  4. bjam -j4 --debug-symbols=on --build-type=complete toolset=msvc-14.0 threading=multi runtime-link=shared address-model=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++ > 附加包含目录
    • 和“链接器 > 附加库目录”。
于 2015-09-02T13:54:04.197 回答
2

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

于 2013-01-11T02:34:57.480 回答
2

b2 -j%cores% 工具集=%msvcver% address-model=64 architecture=x86 link=static threading=multi runtime-link=shared --build-type=minimal stage --stagedir=stage/x64

属性 → 链接器 → 常规 → 附加库目录 $(BOOST)\stage\ x64 \lib

于 2019-06-25T18:37:18.180 回答
1

如果您使用的是 Visual Studio,您是否尝试过使用工具/NuGet 包管理器来安装 boost_program_options-vcXXX?这是安装 boost 的简单方法。

于 2021-12-14T17:19:54.830 回答
0

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

于 2016-02-11T10:02:41.513 回答
0

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

就我而言,旧继承项目中的 bootstrap/bjam 不可用(库已预编译并提交给 SCM)。库的文件名中没有 VC 或 BOOST 版本控制,例如: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.libin列入黑名单

<IgnoreSpecificDefaultLibraries>libboost_regex-vc120-mt-sgd-1_55.lib</IgnoreSpecificDefaultLibraries>
于 2017-11-28T00:21:06.123 回答
0

我在使用 boost 1.60 的 Visual Studio 2012 上遇到了类似的错误:致命错误 LNK1104:无法打开文件 'libboost_filesystem-vc110-mt-gd-1_60.lib'

我通过下载 boost 二进制文件解决了这个问题:

于 2021-08-10T10:16:19.463 回答