似乎我无法让这个工作。我创建了一个简单的控制台应用程序(依赖于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
。
有什么想法吗?
答案 0 :(得分:82)
C ++→常规→附加包含目录参数用于列出编译器将搜索头文件的目录。
您需要告诉链接器在哪里查找要链接的库。要访问此设置,请在解决方案资源管理器窗口中右键单击项目名称,然后单击属性→链接器→常规→其他库目录。在此处输入<boost_path>\stage\lib
(如果build Boost使用默认选项,则这是库所在的路径)。
答案 1 :(得分:79)
对于像我这样自学C ++的业余爱好者来说,这是最简单的方法:
首先将boost库解压缩到您选择的任何目录。我推荐c:\directory
。
c:\boost_1_57_0
。如果您遇到问题,请转到链接库。
c:\boost_1_57_0
。booststrap.bat
(不要费心在命令窗口输入等待,不要关闭我遇到问题需要两周时间解决问题的窗口。过了一会儿booststrap
将运行并生成相同的文件,但现在有两个不同的名称:b2
和bjam
。b2
并等待它运行。bjam
并等待它运行。然后将生成一个名为stage
的文件夹。c:\boost_1_57_0\stage\lib
。你很高兴去!
答案 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
所以我想我会分享我的解决方案。
您可以通过两种方式创建一个升压单元测试项目(此解决方案适用于两者):
以下是我让两个项目工作的步骤:
首先,下载所需的提升版本(例如,boost_1_57_0)。您可以使用正确的二进制文件下载boost(使用msvc v140编译),也可以通过从命令行运行以下命令来自行提取二进制文件:
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)的子文件夹的路径:
答案 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 二进制文件解决了这个问题:
从 https://sourceforge.net/projects/boost/files/boost-binaries/ 下载 boost 二进制文件。例如:https://master.dl.sourceforge.net/project/boost/boost-binaries/1.60.0/boost_1_60_0-msvc-11.0-32.exe?viasf=1
将文件保存在一个目录中。例如C:\boost_1_60_0
运行下载的exe文件
在 Visual Studio 中,修改项目的其他包含目录以包含 boost 目录。例如C:\boost_1_60_0
在 Visual Studio 中,修改项目的附加库目录以包含 lib 目录。例如C:\boost_1_60_0\lib32-msvc-11.0