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

时间:2012-10-24 03:24:59

标签: c++ boost

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

  

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

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

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

有什么想法吗?

11 个答案:

答案 0 :(得分:82)

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

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

答案 1 :(得分:79)

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

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

  1. 打开visual C ++。
  2. 创建一个新项目。
  3. 右键单击该项目。
  4. 点击属性。
  5. 点击C / C ++。
  6. 点击一般。
  7. 选择其他包含库。
  8. 包含图书馆目的地。例如c:\boost_1_57_0
  9. 点击预编译头。
  10. 点击创建/使用预编译的标题。
  11. 选择不使用预编译的标题。
  12. 如果您遇到问题,请转到链接库。

    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
    11. 你很高兴去!

答案 2 :(得分:6)

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

因此,我将配置(在Visual Studio 2012中)更改为项目属性 - &gt; 一般 - &gt; Plataform Toolset 并将 Visual Studio 2012(v110)中的值更改为 Visual Studio 2010(v100)

答案 3 :(得分:4)

又一个解决方案:

我很难过,因为我在我的Link-&gt; 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动态库(.dlls),但没有定义BOOST_ALL_DYN_LINK宏。显然,编译中有一些提示包含一个库,没有BOOST_ALL_DYN_LINK它会查找静态库(带有lib前缀),而不是动态库(没有lib前缀)。

答案 4 :(得分:3)

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

答案 5 :(得分:2)

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

答案 6 :(得分:1)

Visual Studio 2015 (社区版)中尝试使用提升单元测试时遇到类似问题:

  

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

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

您可以通过两种方式创建一个升压单元测试项目(此解决方案适用于两者):

  1. 使用Boost Unit Test Adapter
  2. 或创建Win32控制台应用程序(steps here),并使用boost单元测试函数(steps here)替换main函数。
  3. 以下是我让两个项目工作的步骤:

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

    1. bootstrap.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 地址模型= 32
    5. msvc-14.0 指定我们需要Visual Studio 2015版本(VS 2015 = v14.0 = v140), address-model = 32 指定我们需要平台32(但64位也可以这样做。)

      获得二进制文件后,转到Visual Studio,选择您创建的Boost Unit Testing项目。转到项目属性&gt;配置(从主菜单中)并做出以下选择:

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

      • 包含boost文件夹的路径(例如C:\ boost_1_57_0)以及包含二进制文件(例如C:\ boost_1_57_0 \ stage \ lib)的子文件夹的路径:

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

答案 7 :(得分:0)

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

答案 8 :(得分: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>

并将<{p}中的...vc120-mt-sgd-1_55.lib列入黑名单

<IgnoreSpecificDefaultLibraries>libboost_regex-vc120-mt-sgd-1_55.lib</IgnoreSpecificDefaultLibraries>

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

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

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