• VS2010下编译配置Boost_1.53


    一、准备工作

    1、下载最新版本的boost库.所在地址:boost_1_53_0.zip.官方推荐7z压缩格式的,因为其压缩效率更好,相应包的大小也比较小。

    2、解压缩到指定目录,如C:\boost_1_53.下面开始遵照官方页面的步骤进行编译。()

    1. 进入目录tools\build\v2\
    2. 运行bootstrap.bat脚本文件
    3. 运行命令:b2 install --prefix=PREFIX。其中PREFIX是为Boost.Build指定的安装目录,生成的编译工具将会存放在该目录下。我指定为c:\boost_1_53
    4. 把PREFIX/bin路径加入到系统的环境变量。这时要重启一下命令提示符,以便于应用新的环境变量。

    3、下面要选择一个编译平台。所谓的编译平台,指的具体的编译环境,官方给出了一个列表。

    这里,我们的编译环境使用的是VS2010,也就是VC10,所以我们将toolset指定为msvc.在VS2010的工具选项中打开visual studio命令提示(2010) 。这个命令提示框中已经配置了VS2010的编译环境变量,不用再手动配置什么环境变量。

    4、接下来还有一个准备工作要做,为编译期间产生的中间文件指定一个目录,我指定为c:\boost_1_53\build_manual。

    二、源码编译

    5、开始编译。退回到boost源码的根目录,运行命令:

       b2 --build-dir=build-directory toolset=toolset-name --build-type=complete stage
    • 上述命令中下划线的选项必须是小写的。因为b2是大小写敏感的。(b2是boost build工具的缩写)
    • build-directory是第4步中指定的中间文件目录,toolset是上述表格中的随意一个,complete指示编译工具编译所有库文件版本(如static, runtime, dll, single thread, multi-thread)。
    • stage的含义:该选项指示编译工具将编译完成的所有lib文件都存放在stage\lib\下面。如果要更改,使用b2的选项:--stagedir=directory。
    我的编译命令为: b2 --build-dir=c:\boost_1_53\build_manual toolset=msvc --build-type=complete stage

    6、全部编译时间耗费了半个小时(机器性能较好的缘故)。一般要耗费将近一小时。编译过程会产生很多警告,这些都不要紧。只要不产生errors而终止编译过程,那么都是没有关系的。

    编译产生的文件会有四五个GB大小。所以,最好保证源代码所在文件有足够的磁盘空间。

    7、编译完成后,只有stage\lib\下面这些个文件lib文件,才是我们最终需要的。其他编译产生的文件都无关痛痒。

    8、配置VS2010开发boost程序的环境。

    • 在VS2010中,工具>>选项>>项目和解决方案>>VC++目录这个功能已经被取消了,没办法看到全局的VC++目录设置。所以,我们只好在项目的属性中设置。这样稍显麻烦。每一个boost工程都要重新配置一次,无法达到一劳永逸的效果。
    • 打开项目属性页面,点击"C/C++"和"链接器"这两个结点,具体配置如下所示:

    9、注意自己配置的地方:附加包含目录附加库目录。要注意的是,附加包含目录中,一定不要写成这种形式:E:\codes\src\boost_1_53_0\boost!!这样,在包含头文件的时候,编译器会报错找不到头文件。因为写成这样,会把\boost这个路径给去掉了。而头文件内部依赖的很多其他头文件又是相对于\boost这个路径的。编译无疑无法通过。

    三、测试结果

    10、编译boost库自带的一个源程序:

     1 #include <iostream>
     2 #include <fstream>
     3 #include <ctime>            // std::time
     4 
     5 #include <boost/random/linear_congruential.hpp>
     6 #include <boost/random/uniform_int.hpp>
     7 #include <boost/random/uniform_real.hpp>
     8 #include <boost/random/variate_generator.hpp>
     9 #include <boost/generator_iterator.hpp>
    10 
    11 // This is a typedef for a random number generator.
    12 // Try boost::mt19937 or boost::ecuyer1988 instead of boost::minstd_rand
    13 typedef boost::minstd_rand base_generator_type;
    14 
    15 // This is a reproducible simulation experiment.  See main().
    16 void experiment(base_generator_type & generator)
    17 {
    18   // Define a uniform random number distribution of integer values between
    19   // 1 and 6 inclusive.
    20   typedef boost::uniform_int<> distribution_type;
    21   typedef boost::variate_generator<base_generator_type&, distribution_type> gen_type;
    22   gen_type die_gen(generator, distribution_type(1, 6));
    23 
    24   // If you want to use an STL iterator interface, use iterator_adaptors.hpp.
    25   boost::generator_iterator<gen_type> die(&die_gen);
    26   for(int i = 0; i < 10; i++)
    27     std::cout << *die++ << " ";
    28   std::cout << '\n';
    29 }
    30 
    31 int main()
    32 {
    33   // Define a random number generator and initialize it with a reproducible
    34   // seed.
    35   base_generator_type generator(42);
    36 
    37   std::cout << "10 samples of a uniform distribution in [0..1):\n";
    38 
    39   // Define a uniform random number distribution which produces "double"
    40   // values between 0 and 1 (0 inclusive, 1 exclusive).
    41   boost::uniform_real<> uni_dist(0,1);
    42   boost::variate_generator<base_generator_type&, boost::uniform_real<> > uni(generator, uni_dist);
    43 
    44   std::cout.setf(std::ios::fixed);
    45   // You can now retrieve random numbers from that distribution by means
    46   // of a STL Generator interface, i.e. calling the generator as a zero-
    47   // argument function.
    48   for(int i = 0; i < 10; i++)
    49     std::cout << uni() << '\n';
    50 
    51   /*
    52    * Change seed to something else.
    53    *
    54    * Caveat: std::time(0) is not a very good truly-random seed.  When
    55    * called in rapid succession, it could return the same values, and
    56    * thus the same random number sequences could ensue.  If not the same
    57    * values are returned, the values differ only slightly in the
    58    * lowest bits.  A linear congruential generator with a small factor
    59    * wrapped in a uniform_smallint (see experiment) will produce the same
    60    * values for the first few iterations.   This is because uniform_smallint
    61    * takes only the highest bits of the generator, and the generator itself
    62    * needs a few iterations to spread the initial entropy from the lowest bits
    63    * to the whole state.
    64    */
    65   generator.seed(static_cast<unsigned int>(std::time(0)));
    66 
    67   std::cout << "\nexperiment: roll a die 10 times:\n";
    68 
    69   // You can save a generator's state by copy construction.
    70   base_generator_type saved_generator = generator;
    71 
    72   // When calling other functions which take a generator or distribution
    73   // as a parameter, make sure to always call by reference (or pointer).
    74   // Calling by value invokes the copy constructor, which means that the
    75   // sequence of random numbers at the caller is disconnected from the
    76   // sequence at the callee.
    77   experiment(generator);
    78 
    79   std::cout << "redo the experiment to verify it:\n";
    80   experiment(saved_generator);
    81 
    82   // After that, both generators are equivalent
    83   assert(generator == saved_generator);
    84 
    85   // as a degenerate case, you can set min = max for uniform_int
    86   boost::uniform_int<> degen_dist(4,4);
    87   boost::variate_generator<base_generator_type&, boost::uniform_int<> > deg(generator, degen_dist);
    88   std::cout << deg() << " " << deg() << " " << deg() << std::endl;
    89   
    90   {
    91     // You can save the generator state for future use.  You can read the
    92     // state back in at any later time using operator>>.
    93     std::ofstream file("rng.saved", std::ofstream::trunc);
    94     file << generator;
    95   }
    96 
    97   getchar();
    98   return 0;
    99 }

    这是一个生成随机数的程序,其运行结果如下:

    作者:24K纯开源
    Email: zhangzhongke007@163.com
    出处:http://www.cnblogs.com/csuftzzk/
    本文版权归24K纯开源和博客园共同拥有,欢迎转载,但未经作者同意必须保留此声明,且在文章明显位置给出原文链接,否则保留追究法律责任的权利。

  • 相关阅读:
    Docker镜像与仓库(四)
    Docker网络与存储(三)
    Docker基本使用(一)
    虚拟化KVM之优化(三)
    修改CENTOS7的网卡ens33修改为eth0
    虚拟化KVM之安装(二)
    虚拟化KVM之概述(一)
    Python不同版本打包程序为.exe文件
    JSON
    同源策略(same-origin policy)及三种跨域方法
  • 原文地址:https://www.cnblogs.com/csuftzzk/p/3052046.html
Copyright © 2020-2023  润新知