如何使用Visual Studio 2013构建Boost 1.55?

时间:2014-02-19 10:50:23

标签: c++ boost visual-studio-2013 linker-errors boost-build

我正在尝试使用Visual Studio 2013构建Boost 1.55。

1)我尝试使用boost-binaries(boost-binaries),但当我尝试编译时,Visual Studio会写错误:

  

错误LNK1104:无法打开文件   'libboost_serialization-VC120-MT-GD-1_55.lib'。我用了   boost_1_55_0-msvc-12.0-32.exe或1.55.0-build2(boost-binaries)。

我在boost_1_55_0 \ lib32-msvc-12.0目录中找不到.lib文件。

2)我也尝试使用这个程序BlueGo 0.1.7(BlueGo)。它非常流畅,并创建了我需要的所有库。

问题在于它创建了像这样的.lib文件:

  

libboost_serialization-vc110-MT-GD-1_55.lib

但我使用的是Visual Studio 2013,它需要使用vc120版本的编译器而不是vc110,过度使用会引发错误。

3)最后我决定自己创建dll / lib文件。

我在提升网站中使用了以下指南: Simplified Build From Source

  

如果您希望使用Visual C ++从源代码构建,可以使用简单的   构建本节中描述的过程。打开命令提示符和   将当前目录更改为Boost根目录。然后,输入   以下命令:

bootstrap
.\b2

上面我写了,我需要做什么。

我启动了“VS2012 x86 Native Tools命令提示符”,将dir更改为boost root目录并输入命令:

bootstrap

我立刻得到了错误:

C:\thirdparty\vs2013\x86\boost_1_55_0>.\bootstrap.bat
Building Boost.Build engine

Failed to build Boost.Build engine.
Please consult bootstrap.log for furter diagnostics.

You can try to obtain a prebuilt binary from

   http://sf.net/project/showfiles.php?group_id=7586&package_id=72941

Also, you can file an issue at http://svn.boost.org
Please attach bootstrap.log in that case.

在日志文件中,我注意到以下错误:

  

execnt.c(56):致命错误C1083:无法打开包含文件:   'tlhelp32.h':没有这样的文件或目录

bootstrap.log文件:

###
### Using 'vc12' toolset.
###

C:\thirdparty\vs2013\x86\boost_1_55_0\tools\build\v2\engine>if exist bootstrap rd /S /Q bootstrap 

C:\thirdparty\vs2013\x86\boost_1_55_0\tools\build\v2\engine>md bootstrap 

C:\thirdparty\vs2013\x86\boost_1_55_0\tools\build\v2\engine>cl /nologo /RTC1 /Zi /MTd /Fobootstrap/ /Fdbootstrap/ -DNT -DYYDEBUG -wd4996 kernel32.lib advapi32.lib user32.lib /Febootstrap\jam0  command.c compile.c constants.c debug.c execcmd.c execnt.c filent.c frames.c function.c glob.c hash.c hdrmacro.c headers.c jam.c jambase.c jamgram.c lists.c make.c make1.c object.c option.c output.c parse.c pathnt.c pathsys.c regexp.c rules.c scan.c search.c subst.c timestamp.c variable.c modules.c strings.c filesys.c builtins.c md5.c class.c cwd.c w32_getreg.c native.c modules/set.c modules/path.c modules/regex.c modules/property-set.c modules/sequence.c modules/order.c 
command.c
compile.c
constants.c
debug.c
execcmd.c
execnt.c
execnt.c(56) : fatal error C1083: Cannot open include file: 'tlhelp32.h': No such file or directory
filent.c
frames.c
function.c
glob.c
hash.c
hdrmacro.c
headers.c
jam.c
jambase.c
jamgram.c
lists.c
make.c
make1.c
object.c
Generating Code...
Compiling...
option.c
output.c
parse.c
pathnt.c
pathsys.c
regexp.c
rules.c
scan.c
search.c
subst.c
timestamp.c
variable.c
modules.c
strings.c
filesys.c
builtins.c
md5.c
class.c
cwd.c
w32_getreg.c
Generating Code...
Compiling...
native.c
set.c
path.c
regex.c
property-set.c
sequence.c
order.c
Generating Code...

我试图检查是否存在此文件('tlhelp32.h')。我创建了一个项目并包含文件('tlhelp32.h')。它编译时没有任何错误。

4)我还试图重命名

  

libboost_serialization-vc110-MT-GD-1_55.lib

  

libboost_serialization-VC120-MT-GD-1_55.lib

但Visual Studio再次抛出错误。

Error   1   error LNK1104: cannot open file 'libboost_serialization-vc120-mt-gd-1_55.lib'.

你能告诉我是什么问题以及如何使用Visual Studio 2013构建Boost 1.55?

提前致谢!

5 个答案:

答案 0 :(得分:4)

为include变量设置的路径指向Windows 8.0而不是Windows 8.1。

您在Visual Studio 2013和Windows 8.1中提到的文件应在以下路径中找到:

C:\Program Files (x86)\Windows Kits\8.1\include\um

我修改了INCLUDE变量:

INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE;C:\Program Files (x86)\Windows Kits\8.1\include\shared;C:\Program Files (x86)\Windows Kits\8.0\include\um;C:\Program Files (x86)\Windows Kits\8.0\include\winrt

为:

INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE;C:\Program Files (x86)\Windows Kits\8.1\include\shared;C:\Program Files (x86)\Windows Kits\8.1\include\um;C:\Program Files (x86)\Windows Kits\8.1\include\winrt

答案 1 :(得分:2)

让我们一步一步地开始构建boost构建系统。

“我包含了文件('tlhelp32.h')。它编译时没有任何错误。”

因此,该文件存在于磁盘上。对于由bootstrap.bat运行的cl.exe,环境变量的设置方式不同。包含文件由INCLUDE env变量中的cl.exe搜索。在磁盘上找到tlhelp32.h,在Visual Studio命令提示符中将此路径添加到INCLUDE:

set INCLUDE=%INCLUDE%;<path to tlhelp32.h>

如果找不到某个.lib,请查看LIBPATH env变量。

我认为VS2013 vcvars * .bat文件没有正确设置环境。

答案 2 :(得分:0)

构建boost库真的很头疼。这就是我发现的东西,并把它解决了这个问题;

我遇到了同样的错误,我跟着SourceForge。该链接将带您到压缩文件夹和压缩文件的DLL文件夹。您可以下载并解压缩相关的库,并将其复制到相关位置一切都会好的;)

在项目文件中使用 2010 2012 配置会更好。据我所知,2013年还不方便1.55。

答案 3 :(得分:0)

Visual Studio 2013(在我的例子中,它是带有Update 4的Visual Studio 2013 Express)似乎不包括tlhelp32.h。我刚刚就此问题提交了bug report。 为了解决这个问题,除了Visual Studio之外我安装了Windows SDK(在我的例子中,它是Windows 8.1 SDK)。

答案 4 :(得分:0)

如果您使用的是Windows 8.1,请打开vs2012 x86工具命令提示符,键入

echo %WindowsSdkDir%

如果您在下方看到

C:\Program Files (x86)\Windows Kits\8.0\

这意味着vcvars32.bat会为您设置错误的INCLUDE变量,该问题在ms website中标记为错误 所以解决方案是:

编辑vcvars32.bat,替换

%WindowsSDKDir%\include\um;

C:\Program Files (x86)\Windows Kits\8.1\include\um;

另一个解决方案是修改VS2012 x86 Native Tools命令Prompt.link,复制并粘贴vs2012 x86 Native Tools命令提示符,右键单击,修改链接,全部替换

Microsoft Visual Studio 11.0

Microsoft Visual Studio 12.0

打开链接,尝试构建提升