码迷,mamicode.com
首页 > Windows程序 > 详细

在win7 + vs express for desktop中安装stlport和boost库

时间:2015-06-28 23:05:06      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:

一、安装stlport
stlport是将sgi的stl库平移到各个平台上。sgi的这个库的特点就是效率非常高。boost在这个库上面运行要比vs自带的stl库效率高。所以我们首选安装stlport。

  1. 下载stlport:http://sourceforge.net/projects/stlport/ 最新版本是5.2.1

  2. 放到C盘根目录下面,解压。进入”vs2012 x86 native tools command prompt”。(注意:用cmd不行)

  3. 进入“C:\STLPort”目录,运行命令“configure msvc9”。msvc9应该对应的是vs2008。现在stlport没有支持更高的vs版本。所以,就按msvc9来configure了。
  4. “cd C:\STLport\lib”,运行“nmake -f msvc.mak clean install”。
    这个时候会出现错误,如下:
    *C:\STLport\stlport\stl/_cstdlib.h(158): error C2084: function ‘__int64 abs(__int64)’ already has a body
    C:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE../include/stdlib.h(471) : see previous definition of ‘abs’
    NMAKE : fatal error U1077: ‘“C:\ProgramFiles\Microsoft Visual Studio 10.0\VC\BIN\cl.EXE”’ : return code ‘0x2’*
  5. 解决方法是找到“C:\STLport\stlport\stl_cstdlib.h”文件,在158行中,由
inline _STLP_LONG_LONG  abs(_STLP_LONG_LONG __x) { return __x < 0 ? -__x : __x; }

改成:

#    if !defined(_STLP_MSVC) || (_STLP_MSVC < 1600)
inline _STLP_LONG_LONG  abs(_STLP_LONG_LONG __x) { return __x < 0 ? -__x : __x; }
#    endif
  1. 不出意外的话,等待二十分钟,应该就会编译完成。
  2. 删除“STLport\build\lib\obj”目录中的中间文件(大约300M),节省磁盘工件
  3. 设置vs,优先使用stlport的头文件和lib库

    1. 首先需要打开一个project
    2. 选择 菜单“project–>xx properties…”
    3. 在顶部下拉菜单中选择“configuration: All configurations”,否则每次创建新的project都要设置一次,烦死~
    4. 找到“configuration properties –> vc++ directories”
    5. 修改三个目录:“include directories”,加入“C:\STLPort\stlport”;“library directories”加入“C:\STLPort\lib”;“excutable directories”加入“C:\STLPort\bin”
    6. 找到“configuration properties –> General–>Character Set”,设置为“Not Set”
    7. 找到“configuration properties –>Preprocessor–> Preprocessor Definitions”,加入“_STLP_DEBUG”和“__STL_DEBUG”,这样在debug的时候,就能够动态链接到stlport的debug版本的库了,能够深入debug进去。
    8. 找到“configuration properties –>Preprocessor–> Code Generation–> Runtime Library”,设置成“Multi Thread”。*要注意区分debug版本和release版本,分别对应不同的编译target。

二、安装boost库
boost提供一些stl没有的功能,如:多线程、正则表达式、函数式编程、等等。据说boost要被收录进stl成为标准。

  1. 下载boost库:http://www.boost.org/ 现在的最新版本是1.58.0
  2. 放到C盘根目录下解压,得到“C:\boost”(改了目录名字,去除了版本号)
  3. 用”vs2012 x86 native tools command prompt”进入上面目录,运行批处理文件:“bootstrap.bat”,在“C:\boost”目录下生成b2.exe,bjam.exe,和project-config.jam
  4. 用文本编辑器打开project-config.jam文件,并修改,增加一行“using stlport : STLport : C:/STLport/stlport : C:/STLport/lib ;”以便使用stlport作为底层库进行编译。注意:路径之间用冒号分隔,而不是分号或者空格;上面增加的两个路径分别是头文件路径和lib库路径。
  5. 键入命令“bjam threading=multi link=shared,static runtime-link=shared stdlib=stlport –stagedir=./stage”进行编译……漫长的等待
  6. 编译完成。在我的机器上,failed updated 658 targets, skipped 808 targets, updated 813 targets……
  7. 继续设置project以便能够利用boost库中的文件和编译出来的结果
    1. 首先需要打开一个project
    2. 选择 菜单“project–>xx properties…”
    3. 在顶部下拉菜单中选择“configuration: All configurations”
    4. 找到“configuration properties –> C/C++->General->Additional Include Directories”,设置boost头文件路径,“C:\boost\boost”
    5. 找到“configuration properties –> C/C++->linker->Additional library Directories”,设置boost库文件路径,“C:\boost\stage\lib”。之前老版本,需要从编译好的路径里面copy&paste出来这些库,不过现在貌似都生成在stage目录下了。

三、尝试
从网上找一段代码如下:

#include <iostream>    
#include <vector>  
#include <boost/timer.hpp>  

using namespace std;   
using namespace boost;   

int main()    
{       
    std::vector<int> vt;  //STLport的vector!  
    timer t;    //构造一个计时器对象        
    cout<<"max timespan:"<<t.elapsed_max()/3600<<"h"<<endl; //定时器最大计时        
    cout<<"min timespan:"<<t.elapsed_min()<<"s"<<endl;      //定时器最小计时(分辨率)         

    cout<<"now time elapsed:"<<t.elapsed()<<"s"<<endl;      //从计时器对象构建至今过了多长时间      

    system( "pause" );  
    return 0;   
}

运行结果如下:

max timespan:596.523h
min timespan:0.001s
now time elapsed:0.011s
Press any key to continue . . .

四、参考链接
http://blog.sina.com.cn/s/blog_6f62c9510101svk7.html
http://blog.csdn.net/ajioy/article/details/7304530
http://www.cnblogs.com/fullsail/archive/2011/10/07/2200948.html
http://www.xuebuyuan.com/608176.html

五、后记
用stlport的库的确可能比较快,不过在vs中调试stlport的对象不太方便。其中一个典型的例子是vector。用vs自带的vector,在调试窗口可以直接看到vector中每个元素的值。如果用stlport的话,就必须在窗口中写上“vt._M_non_dbg_impl._M_start[2]”,才能看到vector vt中的第三个元素的值。
我在上面的configure中去掉stlport的头文件和库文件的引用,默认用vs自带的stl来编译“四”中的程序,也能编译通过,且运行通过。

完。

在win7 + vs express for desktop中安装stlport和boost库

标签:

原文地址:http://blog.csdn.net/xceman1997/article/details/46673291

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!