• boost的编译


    第1步:

    先从官网(www.boost.org)下载最新版的BOOST源码,如图所示

    我这里下的是zip的那个
    第2步:
    编译源代码(放心.这里是傻瓜式的操作,很容易操作)
    (1)先把源代码放在E盘,例如 E:oost_1_53_0
    (2)在源代码中找到一个批处理bootstrap.bat,运行即可
    此时会弹出Building Boost.Jam之类,过一会之后,源代码中新增了1个文件bjam.exe
    (3)运行bjame.exe即能编译了(花费时间很长,大概20分钟).
    问题1:文件大小
    下载的boost库80M左右,编译完之后是1.6G,区别是很大.放在磁盘位置大点的地方

     

    问题2:库版本
    目前我用的是1.46.1的版本,编译出来的是VS2010版本的库,这句话什么意思?
    就是说VS2008不能用1.46.1的版本,会报错
    1>正在链接...
    1>LINK : fatal error LNK1104: 无法打开文件“libboost_thread-vc90-mt-1_46_1.lib”
    中间有个VC90,于是我在BOOST库里1个1个的找这个库,发现没有,但是有个VC100
    如图所示:1个是VS2008编译的报错.1个是新版BOOST库并没有VC90,只有VC100
    不同的版本可能编译出的库名不一样,一定要注意

    PS:问题2本人没遇到,如遇到,网上有一种方法可一试:


    配置编译环境:
    .../boost_1_53_0/tools/build/v2中的user-config.jam文件,最后增加一行:using msvc : 6.0 : D:/Program Files/Microsoft Visual Studio/VC98/Bin/cl ;注意上行的格式,冒号两边一定有空格,最后分号一定有空格(因为c++代码中并没有如此苛刻的格式限制,所以一开始没太注意,总也解决不了错误,最后试着才找到这个原因)。
    msvc : 8.0是VS2005
    msvc : 10.0是VS2010


    安装完后,下面就讨论一下怎么用了
    一共2个例子 第1个:怎样使用BOOST库写个线程的Hello World? 第2个怎样使用BOOST库写try,catch?
    --->举例1:怎样使用BOOST库写个线程的Hello World?
    第1步:新建一个VS2005控制台应用程序,选择空项目->增加一个C++源文件
    可以先用
    void main()
    {}
    测试下,可以编译了
    第2步:
    添加BOOST创建线程的代码

    [cpp] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. #include <iostream>  
    2. #include <boost/thread/thread.hpp>  
    3. void hello()  
    4. {  
    5. std::cout << "Hello world, I'm a thread!" << std::endl;  
    6. }  
    7. int main()  
    8. {  
    9. boost::thread thrd(&hello);  
    10. thrd.join();  
    11. }  



    第3步:编译,发现报错

    1> hello.cpp
    ...hello.cpp(2): fatal error C1083: 无法打开包括文件:“boost/thread/thread.hpp”: No such file or directory
    即没有包含BOOST文件与BOOST库的文件,怎样添加,如图所示

    包含目录的添加:

    库目录的添加:

    包含目录添加E:oost_1_53_0
    库目录添加E:oost_1_53_0stagelib
    添加完这2个就可以编译运行了.结果如下:

    举例2:怎样使用BOOST库写try,catch?感觉try,catch在BOOST中用的顶多的,这里顺便也介绍一下写法
    第1步:同举例1一样,新建项目,包含文件与库,一样.这里只是在上面的基础上拷贝了一下代码

    [cpp] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. #include <iostream>  
    2. #include <string>  
    3. #include <boost/lexical_cast.hpp>  
    4. using namespace std;  
    5. int main()  
    6. {  
    7. //std::cout<<"hello, world!";  
    8. string str = "1234t";  
    9. try  
    10. {  
    11. cout << boost::lexical_cast<int>(str) << endl;  
    12. }  
    13. catch (boost::bad_lexical_cast& e)  
    14. {  
    15. cerr<<"Bad cast: "<< e.what() << endl;  
    16. }  
    17. return 0;  
    18. }  



    结果如图:

    【转自:http://hi.baidu.com/vc_net/item/3dc5d0d9f07741e955347f45,有较多修改】

  • 相关阅读:
    [ASP.NET] 使用 ASP.NET SignalR 添加实时 Web
    [ORM] Entity Framework(2) CodeFirst进阶
    [ORM] Entity Framework(1) CodeFirst快速入门
    [C#] 谈谈异步编程async await
    [Solution] NPOI操作Excel
    消息队列二
    消息队列一
    redis成长之路——(七)
    redis成长之路——(六)
    redis成长之路——(五)
  • 原文地址:https://www.cnblogs.com/ct1104/p/4423367.html
Copyright © 2020-2023  润新知