【原】Boost下载安装编译配置使用指南(含Windows、Linux以及ARM Linux) - Terry Wang - 博客园
- 格式:docx
- 大小:15.93 KB
- 文档页数:10
Boost安装配置说明一.MinGW安装并配置(安装编译器)安装mingw-get-inst-20100831.exe;设置环境变量(MinGW安装的位置在D:\MinGW目录):右击我的电脑,点属性->高级->环境变量->系统变量:1、在PATH里加入D:\MinGW\bin,记得,如果里面还有其他的变量,记得要加个分号,分号得在英文输入模式下输入的。
2、新建LIBRARY_PATH变量,如果有的话,在值中加入D:\MinGW\lib,这是标准库的位置。
3、新建C_INCLUDEDE_PATH变量,值设为D:\MinGW\include。
4、新建CPLUS_INCLUDE_PATH变量,值为D:\MinGW\include\c++\3.4.5;D:\MinGW\include\c++\3.4.5;D:\MinGW\include\c++\3.4.5\backward;D:\MinGW\include。
打开一个CMD窗口,检查环境变量是否配置成功。
在命令窗口中输入gcc -v二.安装Boost库1.解压boost_1_47_0.zip文件;2.进入CMD,找到解压的文件里面的bootstrap.bat并运行;3.结束后继续运行b2.exe 如下图:三.安装CodeBlocks-10.05-setup.exe开发工具1.选择编译器选择设置—>编译器和调试器->Select Compler -> GNU GCC Complier2.给CodeBlocks配置Boost库,选择设置 -> 编译器和调试器 -> 连接设置 -> Add Linker Libraries ,在b2.exe 的目录找到路径\boost_1_47_0\stage\lib下的所有文件;和如下两个文件(Sock 支持)C:\MinGW\lib\libws2_32.aC:\MinGW\lib\libwsock32.a搜索路径-> Complier Add: C:\MinGW\include; D:\Projects\CodeBlock\boost_1_47_0a 搜索路径-> Linker Add: C:\MinGW\include; D:\Projects\CodeBlock\boost_1_47_0aLinker Setting :如下两个目录的全部文件:D:\Projects\CodeBlock\boost_1_47_0a\stage\lib\libboost_wserialization-mgw45-mt -d-1_47.aC:\MinGW\lib\libws2_32.aSearch Directories :C:\MinGW\includeD:\Projects\CodeBlock\boost_1_47_0aC:\MinGW\libD:\Projects\CodeBlock\boost_1_47_0a\stage\lib。
WindowsMinGW安装Boost与CLion的配置关于 boost 在 Windows 下的使⽤ gcc 安装与 CLion 的配置, 能够查到的英⽂资料都⽐较少, 踩过坑后记录⼀下.MinGW 安装 Boost下载并解压 Boost ⽂件夹到⼀个稳定的⽂件夹, 此时我的⽂件名为 boost_1_69_0.在进⾏以下⼏步之前请先把 gcc 添加⾄环境变量.在该⽂件夹⽬录下打开命令⾏, ⾸先执⾏:bootstrap gcc 如果你只安装指定的少数⼏个库, 可以使⽤:b2 --show-libraries 得到你可以在这⾥单独安装的所有库的名称. 然后你可以安装指定的某个库, 如 program_options 和 filesystem:b2 toolset=gcc --with-program_options --with-filesystem 或者你想⼀次性编译完毕, 以后就⽆需再进⾏编译:b2 toolset=gcc 以上的指令复制⾄ cmd 可直接执⾏全部编译完成的时间视处理器性能⽽定, ⼤概在⼗分钟左右.此时你可以在 boost 根⽬录下的 stage/lib ⽂件夹下看到以 a 为⽂件扩展名的静态库.CLion CMakeLists 配置 Boost⽹上搜索到的教程容易导致以下⼏个误区认为链接库的⽂件夹⽬录在 bootstrap_1_69_0/libs 下⽆法找到原因为什么⽆法成功 find_package在 Boost 的配置中, 需要指明 BOOST_ROOT, BOOST_INCLUDEDIR, BOOST_LIBRARYDIR 这三个变量. 我的 boost ⽂件夹放在 C:/Local :set(Boost_DEBUG on)set(Boost_DETAILED_FAILURE_MSG ON)#查看 Boost 配置问题所在set(BOOST_ROOT C:/Local/Boost_1_69_0)set(BOOST_INCLUDEDIR ${BOOST_ROOT})set(BOOST_LIBRARYDIR ${BOOST_ROOT}/stage/lib)find_package(Boost COMPONENTS REQUIRED program_options)提⽰ find_package 失败.查看 debug 信息:-- [ .../FindBoost.cmake:1809 ] Searching for PROGRAM_OPTIONS_LIBRARY_RELEASE: boost_program_options-mgw51-mt-1_69;boost_program_options-mgw51-mt;boost_program_options-mt-1_69;boost_program_options-mt;boost_program_options-mt;boos -- [ .../FindBoost.cmake:1862 ] Searching for PROGRAM_OPTIONS_LIBRARY_DEBUG: boost_program_options-mgw51-mt-d-1_69;boost_program_options-mgw51-mt-d;boost_program_options-mt-d-1_69;boost_program_options-mt-d;boost_program_options-m 此时对照 stage/lib ⽂件夹下的⽂件名, 发现名称为libboost_program_options-mgw51-mt-d-x64-1_69.a 或libboost_program_options-mgw51-mt-d-x32-1_69.a因此, 只需将 x64 ⽂件中的⽂件名删掉 “-x64” 即可.故在 stage ⽂件夹下新建⼀个 python3 重命名⽂件脚本:# -*- coding: utf-8 -*-# renamer.pyfrom os import listdir, renameimport refor filename in listdir('lib'):new_filename = re.sub('libboost(.*)-x64(.*).a', r'libboost\1\2.a', filename)rename('lib/' + filename, 'lib/' + new_filename)执⾏后再次进⾏ cmake, 就可以成功 find_package此时按照⽹上教程, 完整的 CMakeLists.txt 为:cmake_minimum_required(VERSION 3.13)project(dot)set(CMAKE_CXX_STANDARD 14)set(Boost_DETAILED_FAILURE_MSG ON)set(Boost_DEBUG on)set(BOOST_ROOT C:/Local/Boost_1_69_0)set(BOOST_INCLUDEDIR ${BOOST_ROOT})set(BOOST_LIBRARYDIR ${BOOST_ROOT}/stage/lib)find_package(Boost COMPONENTS REQUIRED filesystem program_options)add_executable(dot main.cpp command.h)include_directories(${BOOST_ROOT})target_link_libraries(dot ${Boost_LIBRARIES})#Boost_LIBRARIES 为 find_package ⾃动⽣成的变量 CLion 配置 Boost 完成.参考资料(编译时mingw位数需要与系统对应)。
boost库安装教程Win将 D:\boost 引⼊⼯程即可。
Linux下载解压后编译:./bootstrap.shsudo ./b2 --buildtype=complete install# sudo ./b2 --buildtype=complete stagestage选项指定Boost使⽤本地构建。
如果使⽤install选项则编译后会把Boost安装到默认路径下(/usr/local)。
MAC下载boost库解压编译在解压后的⽂件夹内打开终端,执⾏:./bootstrap.shsudo ./b2 --buildtype=complete install# sudo ./b2 --buildtype=complete stagestage选项指定Boost使⽤本地构建。
如果使⽤install选项则编译后会把Boost安装到默认路径下(/usr/local)。
添加库⽂件位置安装好后,Xcode的项⽬中还是找不到Boost,需要⼿动将Boost的路径导⼊进去。
点击左侧⼯程名称,在右侧的Build Settings标签⾥点击ALL找到其中的Search Paths下的Header Search Paths⼀栏,双击增加⼀个⽬录,填⼊⽬录位置,/usr/local/include/,然后找到Library Search Paths⼀栏,填⼊/usr/local/lib,这样就能正常调⽤Boost库了。
测试#include <iostream>#include <boost/version.hpp>int main(int argc, const char * argv[]) {std::cout<<"Boost版本:"<<BOOST_VERSION<<std::endl;return 0;}Boost版本:107100Program ended with exit code: 0。
boost的编译使用Boost是一个流行的C++库,它提供了许多功能强大的工具和组件,包括容器、算法、并发编程、图形学、网络编程等。
要使用Boost库,首先需要下载并安装Boost库,然后在编译和链接你的C++程序时包含相应的Boost头文件和链接Boost库文件。
下面我将从编译和使用Boost库的角度来详细介绍。
1. 下载和安装Boost库。
首先,你需要从Boost官方网站下载最新的Boost库源代码。
然后,解压缩文件并按照官方文档中的指导进行安装。
通常情况下,Boost提供了一个名为bootstrap.bat(Windows)或者bootstrap.sh(Linux)的脚本,你可以运行这个脚本来配置Boost 库。
接着,运行b2命令来编译Boost库。
2. 编译和链接Boost库。
一旦Boost库安装完成,你就可以在你的C++程序中使用它了。
在编译你的程序时,确保你的编译器能够找到Boost库的头文件。
你可以使用编译器的命令行选项或者在你的IDE中配置头文件搜索路径。
在链接你的程序时,确保你的编译器能够找到Boost库文件。
你需要指定Boost库文件的路径和库名字,具体的方法取决于你使用的编译器和操作系统。
3. 使用Boost库。
一旦你的程序成功编译和链接了Boost库,你就可以在你的代码中包含相应的Boost头文件,并使用Boost提供的功能和组件了。
比如,如果你想使用Boost的智能指针,你可以包含<boost/shared_ptr.hpp>头文件,并使用boost::shared_ptr类来管理动态分配的对象。
总之,要使用Boost库,你需要下载、安装Boost库,配置你的编译器,包含Boost头文件,链接Boost库文件,并在你的代码中使用Boost提供的功能和组件。
希望这些信息能够帮助你成功地编译和使用Boost库。
Boost编译和安装说明一、下载和安装从官方主页下载最新版,因为boost一部分类是需要编译成库才能使用的,所以需要准备好boost专用的编译辅助工具bjam。
可直接使用boost安装包中附带的bjam源码来编译出bjam。
将boost安装包解压到E:\boost_1_53_0,运行E:\boost_1_53_0\bootstrap.bat批处理,会复制E:\boost_1_53_0\tools\build\v2\engine\bin.ntx86\bjam.exe到目录E:\boost_1_53_0\下,注意最后bjam.exe必须与boost-build.jam在同级目录。
二、编译打开命令提示符(cmd.exe)窗口并执行bjam,使用--help查看命令帮助。
bjam的命令行参数涉及具体库的选择,会影响编译后的硬盘空间。
使用bjam命令如:bjam stage --toolset=msvc-10.0 --without-python--without-wave --without-test --stagedir="E:\boost_1_53_0_vc10"link=shared runtime-link=shared threading=multi debug release下面详细解释一下每个参数的含义:1)stage/install:stage表示只生成库(dll和lib),install还会生成包含头文件的include目录。
推荐使用stage,因为install生成的这个include目录实际就是boost 安装包解压缩后的boost目录(E:\boost_1_53_0\boost,只比include目录多几个非hpp的小文件),可以直接使用,而且不同的IDE都可以使用同一套头文件。
2)toolset:指定编译器,可选的如borland、gcc、msvc(VC6)、msvc-9.0(VS2008)、msvc-10.0(VS2010)等。
1.获得boost2.boost分布3.只需要头文件的库4.使用boost建立一个简单的程序5.准备使用boost二进制文件库6.把你的程序链接到boost库1.获得boost:下载boost_1_46_1.tar.bz2解压2.boost分布boost_1_46_1.........................boost根目录boost/.....................................所有boost头文件libs/........................................Tests,.cpps,docs等的库文件注意:(1)boost根目录(通常是/usr/local/boost_1_46_1)想到$BOOST_ROOT变量中(2)编译程序时如果用到boost库,需要指定头文件路径-I$BOOST_ROOT(3)因为所有头文件都在boost文件夹下,并且头文件都是hpp后缀,所#include形如:#include <boost/whaever.hpp>3.只需要头文件的库绝大多数的boost库都是header-noly的:它们完全由包含模板和inline函数的头文件组成,不需要单独编译和二进制库文件,也不需要链接时特别对待。
只有下面的boost库必需单独built:∙Boost.Filesystem∙Boost.GraphParallel∙Boost.IOStreams∙Boost.MPI∙Boost.ProgramOptions∙Boost.Python (see the Boost.Python build documentation before building and installing it)∙Boost.Regex∙Boost.Serialization∙Boost.Signals∙Boost.System∙Boost.Thread∙Boost.Wave下面这些单独built是可选(optional)的:Boost.DateTime Boost.Graph Boost.Math Boost.Random Boost.Test4.使用boost建立简单的程序下面的程序()只用到header-only库。
Boost库在Windows及Linux上的安装及使用Windows with VS20101.安装VS20102.下载安装Python (编译Boost库时需要)https:///3.下载 最新boost库/projects/boost/files/latest/download4.解压到指定目录。
例如:D:\boost_1_57_0这时,大部分库可以用了,但是与操作系统相关的部分还需要Build.比如thread库。
5.编译boost库运行command window. 开始菜单/运行/cmd输入Dos命令:d:输入Dos命令:cd d:\boost_1_57_0运行批处理:bootstrap.bat运行完后输入命令:./b2编译结束后就可以使用了6. 设置VS2010添加include 路径:d:\boost_1_57_0添加library路径: d:\stage\lib (编译好后产生的)Linux with GCC1.下载安装Python (编译Boost库时需要)https:///2.下载 最新boost库/projects/boost/files/latest/download3.解压到指定目录例如:/usr/boost_1_57_0这时,大部分库可以用了,但是与操作系统相关的部分还需要Build.比如thread库。
4.Build boost库运行命令窗口,将当前路径切到/usr/boost_1_57_0输入命令:./bootstrap.sh运行完后输入命令:./b2编译结束后就可以使用了5.编译使用boost库的项目例如程序文件为test.cppg++ -c test.cpp -o test.o –I/usr/boost_1_57_0g++ -o test test.o boost_thread.a–lstc++ -pthread –lrt-L/usr/boost_1_57_0/stage/lib注意:如果在使用STL库时报很多undefine的错误,多半是没有link STL 库的原因。
【原】Boost下载安装编译配置使用指南(含Windows、Linux以及ARM Linux) - TerryWang - 博客园——更新于2011/7/19,目前我已对boost的安装和使用有了新的认识,因此也会对两年前写的这篇文章做大幅修改,网上转载版本泛滥,请以本文为准。
——更新于2013/3/20,增加ARM Linux下的编译配置方法。
理论上,本文适用于boost的各个版本,尤其是最新版本1.48.0;适用于各种C++编译器,如VC6.0(部分库不支持),VS2003,VS2005,VS2008,VS2010,V2012,gcc,arm-linux-gcc,C++ Builder等。
先总结一下Windows系统。
一、下载首先从boost官方主页/下载最新版boost安装包,或者使用Subversion获取最新版本,地址是:/svn/boost/trunk。
本人现在一般都用svn,这样可以很方便的进行update和build,而不是每次都下载新的安装包并rebuild。
二、安装如果是使用下载的安装包,那么请将boost安装包解压至本地目录,如:E:\SDK\boost;如果是用svn的,也可以将boost的代码checkout到这个目录。
因为boost一部分类是需要编译成库才能使用的,所以我们还需要准备好boost专用的编译辅助工具bjam。
在命令提示符(cmd.exe)中执行根目录下的bootstrap.bat,编译后的bjam.exe会自动拷贝到该目录下(bjam必须与boost-build.jam在同级目录)。
三、编译接下来就是最重要的编译步骤了。
需要打开命令提示符(cmd.exe)窗口并执行bjam,可以使用--help参数来查看命令帮助。
这里详细讲解一下bjam的命令行参数,因为它非常重要。
首先,它涉及到编程环境的搭建,你需要根据自己今后具体的使用环境来选择合适的命令行参数;其次,它影响到你的硬盘空间,完全编译的话据说在3G以上,如果你同时拥有2个以上的IDE(如VC6和VC9共存)而且都要用到boost,那么占用多少硬盘就自己算吧……虽说如今大家的硬盘空间都不成问题,但就像本人一样崇尚合理利用资源不习惯铺张浪费提倡节俭的童鞋应该大有人在,所以不需要的配置和不需要的库就可以不编译了。
综合以上两点因素,本人使用的bjam命令如下:bjam stage --toolset=msvc-9.0 --without-graph --without-graph_parallel --without-math --without-mpi --without-python --without-serialization --without-wave --stagedir="E:\SDK\boost\bin\vc9" link=static runtime-link=shared runtime-link=static threading=multi debug release下面详细解释一下每个参数的含义:stage/install:stage表示只生成库(dll和lib),install还会生成包含头文件的include目录。
本人推荐使用stage,因为install生成的这个include目录实际就是boost安装包解压缩后的boost目录(E:\SDK\boost\boost,只比include目录多几个非hpp文件,都很小),所以可以直接使用,而且不同的IDE都可以使用同一套头文件,这样既节省编译时间,也节省硬盘空间。
toolset:指定编译器,可选的如borland、gcc、msvc(VC6)、msvc-9.0(VS2008)等。
without/with:选择不编译/编译哪些库。
因为python、mpi等库我都用不着,所以排除之。
还有wave、graph、math、regex、test、program_options、serialization、signals这几个库编出的静态lib都非常大,所以不需要的也可以without掉。
这可以根据各人需要进行选择,默认是全部编译。
但是需要注意,如果选择编译python的话,是需要python语言支持的,应该到python官方主页/下载安装。
查看boost包含库的命令是bjam --show-libraries。
stagedir/prefix:stage时使用stagedir,install时使用prefix,表示编译生成文件的路径。
推荐给不同的IDE指定不同的目录,如VS2008对应的是E:\SDK\boost\bin\vc9,VC6对应的是E:\SDK\boost\bin\vc6,否则都生成到一个目录下面,难以管理。
如果使用了install参数,那么还将生成头文件目录,vc9对应的就是E:\SDK\boost\bin\vc9\include\boost-1_46\boost,vc6类似(光这路径都这样累赘,还是使用stage好)。
build-dir:编译生成的中间文件的路径。
这个本人这里没用到,默认就在根目录(E:\SDK\boost)下,目录名为bin.v2,等编译完成后可将这个目录全部删除(没用了),所以不需要去设置。
link:生成动态链接库/静态链接库。
生成动态链接库需使用shared方式,生成静态链接库需使用static方式。
一般boost库可能都是以static方式编译,因为最终发布程序带着boost的dll感觉会比较累赘。
runtime-link:动态/静态链接C/C++运行时库。
同样有shared和static两种方式,这样runtime-link和link一共可以产生4种组合方式,各人可以根据自己的需要选择编译。
一般link只选static的话,只需要编译2种组合即可,即link=static runtime-link=shared和link=static runtime-link=static,本人一般就编这两种组合。
threading:单/多线程编译。
一般都写多线程程序,当然要指定multi方式了;如果需要编写单线程程序,那么还需要编译单线程库,可以使用single方式。
debug/release:编译debug/release版本。
一般都是程序的debug版本对应库的debug版本,所以两个都编译。
本人按以上方式分别编译了静态链接和动态链接两个版本后,整个E:\SDK\boost 目录有1.28G。
如果不打算将来再升级boost版本,那么可以将编译生成的中间文件bin.v2目录删除,这样整个目录(包括安装包解压缩文件和编译生成的库文件)会减小至不到800MB,如果runtime-link只选了一种方式,那么整个目录只有600MB。
事实上编译完成后除了boost和bin目录之外其他目录和文件已经可以删除了,这样还可以腾出350MB的空间来。
不过我又研究了一下,其实libs这个目录也很有用,它提供了所有Boost类的使用范例,平时可以作为参考;另外doc目录是一个完整的boost使用帮助文档,当然最好也不要删了。
其他几个目录和文件加起来也就几十兆,索性都给它们留一条生路吧。
呵呵,一个完整而又完美的boost目录就此诞生了。
需要注意的是,如果使用VS2008编译boost(其他版本VC未作测试,可能也有类似问题),那么假如你调用boost的主程序添加了_BIND_TO_CURRENT_VCLIBS_VERSION预定义宏来强制使用最新版本的Windows CRT库,那么你的boost也需要添加这个预定义宏来进行编译,否则会导致程序因为各模块使用的CRT库版本不统一而出现“在某些机器上运行提示‘由于应用程序配置不正确,应用程序未能启动’的问题”,关于该问题请参考我的另外一篇文章:【原】解决VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题。
添加该预定义宏的方法是:打开boost安装根目录下的boost\config\compiler\visualc.hpp,在最上面增加:// Added by terry, 2011/4/19, Force the linker to use the latest version of C RT/MFC/ATL dll#ifndef _BIND_TO_CURRENT_VCLIBS_VERSION#define _BIND_TO_CURRENT_VCLIBS_VERSION 1#endif // _BIND_TO_CURRENT_VCLIBS_VERSION这种方法修改了boost的源码,并非我所愿,但是无奈没有找到更好的方法,如果有人知道希望能够留言告诉我。
如果图省事,不想了解这么多,那么有简单的方法,可以使用命令:bjam --toolset=msvc-9.0 --build-type=complete直接指定编译器以完全模式编译即可,这样可以满足今后的一切使用场合,但同时带来的后果是:1、占用3G以上的硬盘空间2、占用若干小时的编译时间3、头文件和库文件存放于C:\Boost(本人非常反感)4、生成的很多文件可以永远也用不上四、配置include目录:E:\SDK\boostlibrary目录:E:\SDK\boost\bin\vc9\lib添加到IDE相应的路径下面即可。
五、使用使用举例:#include <boost\thread.hpp>此时,不用包含库文件,boost的auto-link机制将会自动帮我们包含对应的静态lib。
也就是说,boost默认是以静态方式链接的,这样我们的工程属性最好也设为Multi-threaded (Debug)。
如果想使用dll动态方式链接,需要预先定义宏:#define BOOST_ALL_DYN_LINK同样,此时boost也会默认帮我们包含对应的lib。
如果不想使用boost提供的auto-link机制,或者对它的自动链接不太放心的话(其实大可不必担心),可以预先定义宏:#define BOOST_ALL_NO_LIB然后使用以下方法链接:#pragma comment(lib, "boost_thread-vc90-mt-1_47.lib")或#pragma comment(lib, "boost_thread-vc90-mt.lib")这两个lib其实是一样的,实在不明白boost编译时为什么每个库都要复制一份,难道是因为后者在升级boost版本后不用改代码?另外还有一个比较有用的宏:#define BOOST_LIB_DIAGNOSTIC它可以让VC在编译时的output窗口中输出程序具体链接了哪些boost库以及链接顺序。