关于如何在Visual Studio的空项目中使用Boost库的一步一步的解释是什么?
你需要Boost的哪些部分?很多东西都是TR1的一部分,它是随Visual Studio一起发布的,所以你可以简单地说,例如:
#include <tr1/memory>
using std::tr1::shared_ptr;
根据James的说法,这也应该工作(在c++ 0x中):
#include <memory>
using std::shared_ptr;
虽然Boost网站上的说明很有帮助,但这里有一个简化版本,也可以构建x64库。
只有在使用说明页第3节中提到的其中一个库时才需要这样做。(例如,使用Boost。文件系统需要编译。)如果您不使用其中任何一个,只需解压缩并运行。
构建32位库
这将安装C:\Boost\include\ Boost -(version)下的Boost头文件,以及C:\Boost\lib\i386下的32位库。请注意,库的默认位置是C:\Boost\lib,但如果您计划为多个体系结构构建,则需要将它们放在i386目录下。
解压缩Boost到一个新目录。 启动32位MSVC命令提示符,并切换到解压缩Boost的目录。 运行:引导 运行命令:b2 toolset=msvc-12.0——build-type=complete——libdir=C:\Boost\lib\i386 install 对于Visual Studio 2012,请使用toolset=msvc-11.0 对于Visual Studio 2010,使用toolset=msvc-10.0 对于Visual Studio 2017,使用toolset=msvc-14.1 将C:\Boost\include\ Boost -(version)添加到include路径中。 将C:\Boost\lib\i386添加到libs路径。
构建64位库
这将安装C:\Boost\include\ Boost -(version)下的Boost头文件,以及C:\Boost\lib\x64下的64位库。请注意,库的默认位置是C:\Boost\lib,但如果您计划为多个体系结构构建,则需要将它们放在x64目录下。
解压缩Boost到一个新目录。 启动64位MSVC命令提示符,并切换到解压缩Boost的目录。 运行:引导 运行命令:b2 toolset=msvc-12.0——build-type=complete——libdir=C:\Boost\lib\x64 architecture=x86 address-model=64 install 对于Visual Studio 2012,请使用toolset=msvc-11.0 对于Visual Studio 2010,使用toolset=msvc-10.0 将C:\Boost\include\ Boost -(version)添加到include路径中。 将C:\Boost\lib\x64添加到libs路径中。
虽然Nate的回答已经很好了,但我将根据要求更具体地为Visual Studio 2010展开它,并包括在需要外部库的各种可选组件中编译的信息。
如果您只使用头文件库,那么您所需要做的就是解压缩boost下载并设置环境变量。下面的指令仅为Visual Studio设置环境变量,而不是在整个系统中设置。注意你只需要做一次。
Unarchive the latest version of boost (1.47.0 as of writing) into a directory of your choice (e.g. C:\boost_1_47_0). Create a new empty project in Visual Studio. Open the Property Manager and expand one of the configuration for the platform of your choice. Select & right click Microsoft.Cpp.<Platform>.user, and select Properties to open the Property Page for edit. Select VC++ Directories on the left. Edit the Include Directories section to include the path to your boost source files. Repeat steps 3 - 6 for different platform of your choice if needed.
如果您想使用boost中需要构建的部分,但不需要任何需要外部依赖的特性,那么构建它相当简单。
将最新版本的boost(编写时为1.47.0)解压缩到您选择的目录(例如C:\boost_1_47_0)。 启动所选平台的Visual Studio命令提示符,并导航到boost所在的位置。 运行:bootstrap.bat来构建b2.exe(以前命名为bjam)。 b2运行: Win32: b2——toolset=msvc-10.0——build-type=完成阶段; X64: b2——toolset=msvc-10.0——build-type=完整架构=x86 address-model=64 stage
去散步/看电影或2 / ....
执行上述指令集中的步骤2 - 6来设置环境变量。 编辑库目录部分,以包括到boost库输出的路径。(上面的示例和指令的默认值是C:\boost_1_47_0\stage\lib。如果你想让x86和x64并排(例如到<BOOST_PATH>\lib\x86 & <BOOST_PATH>\lib\x64),先重命名并移动目录。 重复步骤2 - 6为不同的平台,您的选择,如果需要。
如果您需要可选组件,那么您有更多的工作要做。这些都是:
提振。IOStreams Bzip2过滤器 提振。IOStreams Zlib过滤器 提振。MPI 提振。Python 提振。Regex ICU支持
Boost。IOStreams Bzip2过滤器:
将最新版本的bzip2库(编写时为1.0.6)源文件解压缩到您选择的目录(例如C:\bzip2-1.0.6)。 按照上面的第二组指令构建boost,但是在第5步中运行b2时添加选项-sBZIP2_SOURCE="C:\bzip2-1.0.6"。
提振。IOStreams Zlib过滤器
将最新版本的zlib库(编写时为1.2.5)源文件解压缩到您选择的目录(例如C:\zlib-1.2.5)。 按照上面的第二组指令构建boost,但是在第5步中运行b2时添加选项-sZLIB_SOURCE="C:\zlib-1.2.5"。
提振。MPI
Install a MPI distribution such as Microsoft Compute Cluster Pack. Follow steps 1 - 3 from the second set of instructions above to build boost. Edit the file project-config.jam in the directory <BOOST_PATH> that resulted from running bootstrap. Add in a line that read using mpi ; (note the space before the ';'). Follow the rest of the steps from the second set of instructions above to build boost. If auto-detection of the MPI installation fail, then you'll need to look for and modify the appropriate build file to look for MPI in the right place.
提振。Python
Install a Python distribution such as ActiveState's ActivePython. Make sure the Python installation is in your PATH. To completely built the 32-bits version of the library requires 32-bits Python, and similarly for the 64-bits version. If you have multiple versions installed for such reason, you'll need to tell b2 where to find specific version and when to use which one. One way to do that would be to edit the file project-config.jam in the directory <BOOST_PATH> that resulted from running bootstrap. Add in the following two lines adjusting as appropriate for your Python installation paths & versions (note the space before the ';'). using python : 2.6 : C:\\Python\\Python26\\python ; using python : 2.6 : C:\\Python\\Python26-x64\\python : : : <address-model>64 ; Do note that such explicit Python specification currently cause MPI build to fail. So you'll need to do some separate building with and without specification to build everything if you're building MPI as well. Follow the second set of instructions above to build boost.
提振。Regex ICU支持
Unarchive the latest version of ICU4C library (4.8 as of writing) source file into a directory of your choice (e.g. C:\icu4c-4_8). Open the Visual Studio Solution in <ICU_PATH>\source\allinone. Build All for both debug & release configuration for the platform of your choice. There can be a problem building recent releases of ICU4C with Visual Studio 2010 when the output for both debug & release build are in the same directory (which is the default behaviour). A possible workaround is to do a Build All (of debug build say) and then do a Rebuild all in the 2nd configuration (e.g. release build). If building for x64, you'll need to be running x64 OS as there's post build steps that involves running some of the 64-bits application that it's building. Optionally remove the source directory when you're done. Follow the second set of instructions above to build boost, but add in the option -sICU_PATH="C:\icu4c-4_8" when running b2 in step 5.
我可以推荐以下技巧:创造一种特殊的刺激。道具文件
打开物业管理 右键单击项目节点,选择“添加新项目属性表”。 选择一个位置并命名您的属性表(例如:c:\mystuff\boost.props) 将附加的Include和Lib文件夹修改为搜索路径。
此过程的价值是仅在希望显式包含boost的项目中包含它。当你有一个使用boost的新项目时,请:
打开物业管理器。 右键单击项目节点,并选择“添加现有属性表”。 选择boost属性表。
编辑(以下编辑来自@jim-fred):
由此产生的推动力。道具文件看起来像这样…
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros">
<BOOST_DIR>D:\boost_1_53_0\</BOOST_DIR>
</PropertyGroup>
<PropertyGroup>
<IncludePath>$(BOOST_DIR);$(IncludePath)</IncludePath>
<LibraryPath>$(BOOST_DIR)stage\lib\;$(LibraryPath)</LibraryPath>
</PropertyGroup>
</Project>
它包含一个用于boost目录位置的用户宏(在本例中为D:\boost_1_53_0)和另外两个参数:IncludePath和LibraryPath。语句#include <boost/thread.hpp>将在适当的目录中找到thread.hpp(在本例中为D:\boost_1_53_0\boost\thread.hpp)。'stage\lib\'目录可能会根据安装到的目录而改变。
这提振。props文件可以位于D:\boost_1_53_0\目录中。
在KTC非常翔实的主要回答中补充一点:
如果您正在使用免费的Visual Studio c++ 2010 Express,并设法获得了一个编译64位二进制文件的程序,现在想使用它来使用64位版本的Boost库,那么您最终可能会使用32位程序库(当然,您的情况可能有所不同,但在我的机器上这是令人遗憾的情况)。
我可以使用以下方法来修复这个问题:在上述步骤之间
启动32位MSVC命令提示符,并切换到解压缩Boost的目录。 运行:引导
我插入了一个调用“setenv”来设置环境。对于发布版本,上面的步骤变成:
启动32位MSVC命令提示符,并切换到解压缩Boost的目录。 运行:"C:\Program Files\Microsoft sdk \Windows\v7.1\Bin\setenv. "/Release /x64 . cmd 运行:引导
我在这里找到了这个信息: http://boost.2283326.n4.nabble.com/64-bit-with-VS-Express-again-td3044258.html
下面是我使用Boost的方法:
下载并解压zip版本的Boost库。 运行bootstrap.bat文件,然后运行bjam.exe。 等待大约30分钟左右。 在Visual Studio中创建一个新项目。 转到项目——>属性——>连接器——>通用——>附加库目录,并将boost/stage/lib目录添加到其中。 转到项目——>属性——>C/ c++——>通用——>附加包括目录并添加boost目录。
您将能够毫无错误地构建您的项目!
下载促进: http://www.boost.org/users/download/ 例如:SVN
Windows ->乌龟(最简单的方法)
之后: cmd ->进入boost目录(“D:\boostTrunk”-在那里您签出或下载并提取包): 命令: 引导
我们创建了bjam.exe在("D:\boostTrunk") 之后: 命令: Bjam toolset=msvc-10.0 variant=debug,release threading=multi link=static (大概需要20分钟左右)
后: 打开Visual studio 2010 ->创建空项目->到项目属性->设置:
粘贴此代码并检查它是否工作?
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/regex.hpp>
using namespace std;
struct Hello
{
Hello(){
cout << "Hello constructor" << endl;
}
~Hello(){
cout << "Hello destructor" << endl;
cin.get();
}
};
int main(int argc, char**argv)
{
//Boost regex, compiled library
boost::regex regex("^(Hello|Bye) Boost$");
boost::cmatch helloMatches;
boost::regex_search("Hello Boost", helloMatches, regex);
cout << "The word between () is: " << helloMatches[1] << endl;
//Boost shared pointer, header only library
boost::shared_ptr<Hello> sharedHello(new Hello);
return 0;
}
资源: https://www.youtube.com/watch?v=5AmwIwedTCM
一个简单的例子,让你开始在Visual Studio:
1.从这里下载并解压Boost。
2.创建一个Visual Studio空项目,使用一个不需要单独编译的示例boost库:
#include <iostream>
#include <boost/format.hpp>
using namespace std;
using namespace boost;
int main()
{
unsigned int arr[5] = { 0x05, 0x04, 0xAA, 0x0F, 0x0D };
cout << format("%02X-%02X-%02X-%02X-%02X")
% arr[0]
% arr[1]
% arr[2]
% arr[3]
% arr[4]
<< endl;
}
3.在Visual Studio项目属性中设置附加包含目录:
举个简单的例子:
如何在Visual Studio中安装Boost库
如果你不想使用整个boost库,只使用一个子集:
使用Windows中的boost库的子集
如果你现在特别想了解需要编译的库:
如何在Windows中使用Boost编译库
这篇文章已经有一段时间了,我想我应该添加一些关于如何在特定的硬件上尽可能快地构建Boost的内容。
如果你有4核或6核,分别使用-j5或-j7。当然不是标准版本,也不是-j2,除非你确实有双核。
我在我的主站上运行了一个3930K(6核)库存的Sandy Bridge Extreme,但在旧的备份盒上有一个2600k(4核),趋势是我用N + 1构建进程获得了最佳的Boost编译时间,其中N是物理内核的数量。N+2达到收益递减点,时间增加。
注:超线程启用,32GB内存DDR3,三星840 EVO SSD。
-j7在6核(2分51秒)(Win7终极x64)(Visual Studio 2013)
PS C:\Boost\boost_1_56_0> measure-command { .\b2 -j7 --build-type=complete msvc stage }
Days : 0
Hours : 0
Minutes : 2
Seconds : 51
Milliseconds : 128
Ticks : 1711281830
TotalDays : 0.0019806502662037
TotalHours : 0.0475356063888889
TotalMinutes : 2.85213638333333
TotalSeconds : 171.128183
TotalMilliseconds : 171128.183
-j6在6核(3分2秒)(Win7终极x64)(Visual Studio 2013)
PS C:\Boost\boost_1_56_0> measure-command { .\b2 -j6 --build-type=complete msvc stage }
Days : 0
Hours : 0
Minutes : 3
Seconds : 2
Milliseconds : 809
Ticks : 1828093904
TotalDays : 0.00211584942592593
TotalHours : 0.0507803862222222
TotalMinutes : 3.04682317333333
TotalSeconds : 182.8093904
TotalMilliseconds : 182809.3904
-j8在6核(3分17秒)(Win7终极x64)(Visual Studio 2013)
PS C:\Boost\boost_1_56_0> measure-command { .\b2 -j8 --build-type=complete msvc stage }
Days : 0
Hours : 0
Minutes : 3
Seconds : 17
Milliseconds : 652
Ticks : 1976523915
TotalDays : 0.00228764342013889
TotalHours : 0.0549034420833333
TotalMinutes : 3.294206525
TotalSeconds : 197.6523915
TotalMilliseconds : 197652.3915
配置
Building the Boost C++ Libraries.
Performing configuration checks
- 32-bit : yes (cached)
- arm : no (cached)
- mips1 : no (cached)
- power : no (cached)
- sparc : no (cached)
- x86 : yes (cached)
- has_icu builds : no (cached)
warning: Graph library does not contain MPI-based parallel components.
note: to enable them, add "using mpi ;" to your user-config.jam
- zlib : no (cached)
- iconv (libc) : no (cached)
- iconv (separate) : no (cached)
- icu : no (cached)
- icu (lib64) : no (cached)
- message-compiler : yes (cached)
- compiler-supports-ssse3 : yes (cached)
- compiler-supports-avx2 : yes (cached)
- gcc visibility : no (cached)
- long double support : yes (cached)
warning: skipping optional Message Passing Interface (MPI) library.
note: to enable MPI support, add "using mpi ;" to user-config.jam.
note: to suppress this message, pass "--without-mpi" to bjam.
note: otherwise, you can safely ignore this message.
- zlib : no (cached)
我注意到64位构建需要更长的时间,我需要对这些进行相同的比较和更新。
这里的Windows安装程序非常适合我。我采取了以下步骤:
Follow the installation wizard until finished. Run visual studio. Create a new C++ project Open project properties (can be found by right-clicking the project name in the solution explorer) Under "C/C++ > General > Additional Include Directories" add the path where boost root directory. Default for my version was C:\local\boost_1_63_0. The number after "boost" is the version of boost. In project properties, under "Linker > Additional Library Directories" add the directory for library files. Default for my version was C:\local\boost_1_63_0\lib64-msvc-14.0. The number after "lib" is related to the build target (32 bit or 64 bit in Visual Studio) and the number after "msvc" is related to the version of Visual Studio (14.0 is related to Visual Studio 2015, but I'm using it with the 2017 Visual Studio).
好运!
此外,还有一些东西我觉得很有用。为您的提升路径使用环境变量。(如何在窗口中设置环境变量,链接在底部7,8,10)BOOST_ROOT变量似乎是常见的地方了,它被设置为解压boost的根路径。
然后在属性,c++,通用,附加包含目录使用$(BOOST_ROOT)。然后,如果/当您移动到boost库的新版本时,您可以更新环境变量以指向这个新版本。随着你的项目越来越多,使用boost,你将不必为所有的项目更新“附加包含目录”。
您还可以创建一个BOOST_LIB变量,并将其指向库暂存的位置。同样地,对于链接器->附加库目录,您不必更新项目。我有一些旧的东西用vs10和vs14建立了新的东西,所以建立了两个口味的boost lib到同一个文件夹。所以如果我把一个项目从vs10移动到vs14,我不需要改变提升路径。
注意:如果你改变了一个环境变量,它不会突然在一个开放VS项目中工作。VS在启动时加载变量。所以你需要关闭VS然后重新打开它。
推荐文章
- 面试问题:检查一个字符串是否是另一个字符串的旋转
- 如何使用枚举作为标志在c++ ?
- 在c++程序中以编程方式检测字节序
- 为什么我的程序不能在Windows 7下用法语编译?
- 如何获取变量的类型?
- 查看Visual Studio 2010+中的所有断点
- 什么是奇怪的重复模板模式(CRTP)?
- 连接两个向量的最佳方法是什么?
- 在c++中,是通过值传递更好,还是通过引用到const传递更好?
- Visual Studio禁用缺少XML注释警告
- 在STL中deque到底是什么?
- Windows上最好的免费c++分析器是什么?
- 如何自动转换强类型枚举为int?
- 在一个类中使用具有成员函数的泛型std::function对象
- 'for'循环中的后增量和前增量产生相同的输出