zoukankan      html  css  js  c++  java
  • Win7+vs2010下安装boost_1_46_1库

    一、boost库分类:

    (1)不需要编译库:any、array、asio、conversion、crc、bind/mem_fn、enable_if、function、lambda、mpl、smart_ptr...

    (2)需要编译的库:date_time、filesystem、function_types、graph、iostreams、math、mpi、program_options、python、regex、serialization、signals、system、test、thread、wave

    二、完全编译boost将要依赖的一些官方库:

    (1)Regex所需Unicode支持类库 -- ICU ,编译ICU较为简单,解开ICU包之后,在其目录下可以找到一个叫"allinone"的目录,用Visual studio或者visual studio express打开里面的allinone.sln,选择release,即可以编译完成,编译之后,将include目录和lib目录下的库文件拷贝出来,分别放在C:icuinclude和C:iculib。

    (2)Graph所需的XML处理类库 --Expat,下载expat-win32bin-2.0.1安装到C:expat即可。

    (3)MPI所需MPI类库 -- Boost的官方站点说需要MPICH或OpenMPI之类的支持,事实上在Windows下总是会提示需要MPIC++,你需要的是Microsoft Cluster Pack SDK,下载并默认安装在C:ProgramFilesMicrosoft Compute Cluster Pack下。(说明:如果安装Microsoft HPC Pack 2008 SDK或Microsoft Compute ClusterPack时不是装到默认的路径下,那bjam就会抓瞎,找不到mpic++的路径,这时候可以修改一下mpi.jam(在boost_1_46_1 oolsuildv2 ools): local cluster_pack_path_native = "你的路径")

    (4)Python所需Python语言库--Python,下载Python 2.7.1 Windows Installer,安装到C:

    三、编译boost库:

    1.下载安装包boost_1_46_1 选择下载windows版本

    2.解压缩到D:oost目录下

    3.运行bootstrap.bat

    (1)从vs2010的工具菜单进入命令提示窗口(单击“开始”按钮,指向“所有程序”,指向“Microsoft Visual Studio 2010”,指向“Visual Studio tools(工具)”,然后单击“Visual Studio 2010 command prompt(命令提示)”
    (2)cd到D:oostoost_1_46_1下执行bootstrap.bat,然后,会在d:oostoost_1_46_1下生成bjam.exe

    4.设定编译环境(加入红色字体)    
    修改user-config.jam (d:oostoost_1_46_1 oolsuildv2user-config.jam) 的MSVC configuration  

    # MSVC configuration      
    # Configure msvc (default version, searched in standard location # and PATH).   
    # using msvc ;   
    using msvc : 10.0 : : <compileflags>/wd4819 <compileflags>/D_CRT_SECURE_NO_DEPRECATE
    <compileflags>/D_SCL_SECURE_NO_DEPRECATE <compileflags>/D_SECURE_SCL=0 ;

    要支持mpi,你可以添加一行“using mpi ;”即可

    5.cd到D:oostoost_1_46_1下执行 
    编译boost库命令:

    bjam install -s HAVE_ICU=1 -s ICU_PATH=C:icu --toolset=msvc-10.0 --build-type=complete link=static runtime-link=static --prefix="E:oostoost_1_46_1" threading=multi

    variant=release

    (这一步需要等待很长时间,大概一个小时左右……)

    下面详细解释一下每个参数的含义:
    stage/install:stage 表示只生成库(dll和lib),install还会生成包含头文件的include目录。推荐使用stage,因为install生成的这个include目录实际就是boost安装包解压缩后的boost目录,所以可以直接使用,而且不同的IDE都可以使用同一套头文件,这样既节省编译时间,也节省硬盘空间。

    toolset:指定编译器,可选的如borland、gcc、msvc(VC6)、msvc-10.0(VS20010)等。

    without/with:选择不编译/编译哪些库,不需要的可以without掉。这可以根据各人需要选择,默认是全部编译。但是需要注意,如果选择编译python的话,是需要python语言支持的,要先下载python。

    stagedir/prefix:stage 时使用stagedir,install时使用prefix,表示编译生成文件的路径。(说明:使用install时,include文件目录结构是这样的E:oostoost_1_46_1includeoost_1_46_1oost,路径很累赘,可以去掉中间一层oost_1_46_1。不管怎样,个人觉得还是使用stage好,一方面是快,另一方面也没这么纠结的目录)

    build-dir:编译生成的中间文件的路径。这个本人这里没用到,默认就在根目录下,目录名为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版本,所以两个都编译。

    如果不选择安装Python,两步:

    (1)bjam --without-python --toolset=msvc-10.0 --build-type=complete

            --prefix="E:oostoost_1_46_1" install

    (2)bjam --with-python --toolset=msvc-10.0 --build-type=complete

            --prefix="E:oostoost_1_46_1" install

    6.设定vs2010环境

    (注:在2010环境下这步,在项目-->右键属性-->VC++ Directories 中去填写对应路径 )   
    Tools -> Options -> Projects and Solutions -> VC++ Directories   
    在Library files加上E:oostoost_1_46_1lib   
    在Include files加上E:oostoost_1_46_1include

    相关:

    使用举例:

      #include<boost hread.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-vc100-mt-1_46.lib")或

      #pragma comment(lib, "boost_thread-vc100-mt.lib")

      这两个lib其实是一样的,实在不明白boost编译时为什么每个库都要复制一份,难道是因为后者在升级boost版本后不用改代码?另外还有一个比较有用的宏:

      #define BOOST_LIB_DIAGNOSTIC

      它可以让VC在编译时的output窗口中输出程序具体链接了哪些boost库以及链接顺序。

      关于boost的auto-link机制,详细可以看看boostconfigauto_link.hpp里的代码,很容易可以读懂,并且值得我们学习。

      

    另:Linux下编译与配置的区别:

      我的Linux与Windows使用了共享目录,将Windows下的E:SDK目录映射成了Linux下的/mnt/hgfs/sdk目录。

      所以我的boost源文件根目录就是/mnt/hgfs/sdk/boost_1_45_0,cd进去。

      首先需要编译bjam:

      cd tools/jam

      ./build_dist.sh

    我在虚拟机的Linux下编译bjam的时候最后会卡住,屏幕显示到mkdir的地方就不往下走了,不过其实这时候bajm已经编译完成。

      接下来将stage/bin.linuxx86目录下生成的bjam拷贝到boost源文件根目录boost_1_45_0下,cd进去,开始编译boost:

      ./bjam stage --toolset=gcc --with-date_time --with-thread --with-filesystem --with-program_options --stagedir="/mnt/hgfs/sdk/boost_1_45_0/bin/gcc" link=static runtime-link=static threading=multi debug release

      这些参数的意义与Windows下完全一样,只不过编译器改成gcc,其他选项根据自己的需要进行设置。

      生成的库文件就在bin/gcc/lib目录下,与vc10编译的一样,lib目录感觉是多余的,手动将库文件拷贝到gcc目录下,删掉lib目录,这属于个人喜好问题。

      然后把中间文件全部删掉,包括bin.v2目录和tools/jam/stage目录。

      关于boost库的使用,为了不用每次写makefile都把boost的头文件和库文件的路径带着,而且为了让跨平台程序公用一套代码,

      可以将boost的头文件和库文件路径加到Linux的环境变量中。打开/etc/profile,加入以下gcc环境变量:

      CPLUS_INCL?_PATH=$CPLUS_INCL?_PATH:"/mnt/hgfs/sdk/boost_1_45_0"

      export CPLUS_INCL?_PATH

      LIBRARY_PATH=$LIBRARY_PATH:"/mnt/hgfs/sdk/boost_1_45_0/bin/gcc"

      export LIBRARY_PATH

      这样就可以直接使用boost的头文件和库文件了,并且与Windows共用一套代码,非常方便。

  • 相关阅读:
    Best wishes for a wonderful new year.
    Using X++ code Reading to CSV file
    Types of delete action
    get focus from the FORM in dynamcis AX 2009
    Database Lock
    Using x++ code export to CSV file from dynamics AX 2009
    Using x++ code updated to system filed values
    Merry Christmas and Best Wishes for a Happy New Year
    the most reluctant to delete to New Year SMS
    《那些年啊,那些事——一个程序员的奋斗史》——53
  • 原文地址:https://www.cnblogs.com/lidabo/p/3782400.html
Copyright © 2011-2022 走看看