安装Boost

本文介绍如何在VS2003环境下安装Boost库及其STLPort版本,包括配置步骤、编译过程及常见问题解决方法。
对于vs2003.net,如果只安装boost 相对比较简单,可以跳到步骤2,这里要安装boost 的stlport 版本。即同时安装stlport 和 以stlport 为标准库编译 boost .
1、先安装stlport
进入stlport/src 目录
运行nmake –f vc71.mak install
这样默认stlport头文件放入
..../Microsoft Visual Studio .NET 2003/Vc7/include/stlport 目录
在vc 的工具-〉选项-〉项目-〉vc++目录 中设置stlport头文件目录。
注意目录位置要放在vc 头文件链接的上面,这样#include 标准库是优先选择了stlport 而不是 vc 自带的stl .
lib 自动拷贝到了vc7/lib 中可以不用设置。

对于5.02 版本,src目录中没有makefile 文件, 有cmd控制台进入build/ lib 目录,执行完 configure.bat 然后再对vc71.mak 进行 make

2、编译boost,  先编译bjam:
a 运行tools/build/jam_src/build.bat,然后会看见 bin.ntx86目录,里面有bjam.exe

b设置环境变量 如: 
PATH= e:/boost1.32.0/boost/tools/build/jam_src/bin.ntx86
 或者把bjam 拷贝到boost 根目录

SET VC71_ROOT=
"C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7"
这个也可以不用设置。

使用vc提供的工具 visual studio.net 2003 命令提示控制台,进入boost目录:执行

bjam  "-sTOOLS=vc-7_1 " install

便可把相关的头文件和编译后的库文件默认安装到c:/boost。如果不使用stlport 对于vc2003安装就这么简单,


对于支持stlport 的boost 安装执行

bjam "-sTOOLS=vc-7_1-stlport" "-sSTLPORT_PATH=E:/STLPort
"-sSTLPORT_VERSION=4.6.2" stage
我安装的stlport是4.6.2版本的,注意上面指定的stlport目录和版本,在编译过程中会出错但能编译完。
如:F:/boost/boost_1_32_0/boost/lexical_cast.hpp(150) : error C2679:
还有其他一些原因不能编译出来的库。
大部分安装都会有这个问题,可以添加 "-sBUILD=<native-wchar_t>off" 选项关闭编译时的/zc:wchar_t选项
bjam "-sTOOLS=vc-7_1-stlport" "-sBUILD=<native-wchar_t>off"  "-sSTLPORT_PATH=E:/STLPort" "-sSTLPORT_VERSION=4.6.2"  stage
注意按照上面 stlport  lib 的目录是在
E:/STLPort/stlport-4.6.2/lib ,后面数字是版本号指定的目录中的数字

编译后在boost 根目录出现一个stage 目录,里面是所有编译过的库。我的stlport 版本有158个文件,vc 200多一些,可见stlport 有些库没出来,多半是跟wchar_t有关的。

完成后可以测试下面的程序
#include "stdafx.h"
#include <iostream>
#include <boost/regex.hpp>
#include <boost/thread.hpp>

int main()

    // 3 digits, a word, any character, 2 digits or "N/A", 
    // a space, then the first word again
    boost::regex reg("//d{3}([a-zA-Z]+).(//d{2}|N/A)//s//1");   
    std::string correct="123Hello N/A Hello"; 
    std::string incorrect="123Hello 12 hello";   
    assert(boost::regex_match(correct,reg)==true); 
    assert(boost::regex_match(incorrect,reg)==false);
    boost::regex reg1("(new)|(delete)");
    boost::smatch m;std::string s=  "Calls to new must be followed by delete. /  Calling simply new results in a leak!";
    if (boost::regex_search(s,m,reg1))
    {  // Did new match? 
        if (m[1].matched)   
            std::cout << "The expression (new) matched!/n"; 
        if (m[2].matched)   
            std::cout << "The expression (delete) matched!/n";
    }
    return 0;
}

注意编译debug 版本设置工程-〉c++ -> 命令行附加选项加入 /GX  /D_STLP_DEBUG。代码生成-〉运行时库必须选择多线程版本的, 没有
/D_STLP_DEBUG  编译时回停留在这里
elif defined(_DEBUG)
#            define BOOST_LIB_RT_OPT "-gdp"
#            pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1")
#            error "Build options aren't compatible with pre-built libraries"
#        else
#            define BOOST_LIB_RT_OPT "-p"

如果没有指定使用多线程版本,编译会提示你缺少libboost_regex-vc71-sgdp-1_xx_1.lib 的库,其实默认编译没有这个库。可能指定一些编译参数会有吧. 如果不指定多线程的话。stlport 的库也有链接问题。这些库基本都是多线程版本的(不代表线程安全)。最好指定为多线程动态库 /md 或 /mdd 版本。静态库编译出来太大了

对于test 库,程序能编译但不能链接,对于vc自带stl 与stl port 都一样,不知道哪里需要设置。里面有些文件直接在vc工程中都不能编译,可能版本还不是太好,错误如下
test_tools::tt_detail::check_impl  , 搜搜网上存在这样问题的不少。这样BOOST_CHECK 之类的宏就不能使用了
error LNK2019: 无法解析的外部符号 "void __cdecl boost::test_tools::tt_detail::check_impl(class boost::test_tools::predicate_result const &,class boost::basic_wrap_stringstream<char> &,class boost::unit_test::basic_cstring<char const >,unsigned int,enum boost::test_tools::tt_detail::tool_level,enum boost::test_tools::tt_detail::check_type,unsigned int,...)" (?check_impl@tt_detail@test_tools@boost@@YAXABVpredicate_result@23@AAV?$basic_wrap_stringstream
@D@3@V?$basic_cstring@$$CBD@unit_test@3@IW4tool_level@123@W4check_type@123@IZZ)

delphiASIO_mmzmagic本库是Boost ASIO for delphi的高效率稳定封装 做了8年多的DELPHI开发,还仍然在用D7,后续的DELPHI版本比如d2007,d2010还是非常很优秀的,有许多方便的功能和语法效率的改进。为啥不更换到新版本呢? 对于我来说究其原因还是因为通讯程序无法简单的做修改就移植到新版本上。 另外一个方面也是DELPHI本身没有较好的通讯库,INDY不稳定也不完善,不同版本也有些区别。开发起来四处抛异常的方式也让人很不爽。 研究了一些第三方通讯库,如ics系列dxsock系列,最后选择了dxsock,这样轻量级的库从稳定性还是易用性来说都比其它的要好用些。 不过这些库由于底层实现的方式都不能很好的支持大规模应用,由于后续支持的问题也不能支持DELPHI的新unicode版本。 C++由于有类似ACE、ASIO等等工业级的高性能稳定牛库的支持,c++的使用者们可以轻轻松松搞定很多难题而不用为并发连接数发愁。 为此经我研究决定封装底层基于IOCP(完成端口)实现的Boost::ASIO为DELPHI的底层通讯库,并且已经实现,delphi fans们大家有福啦 哈哈! 主要有以下几点好处: 1、支持大量并发( xp系统上测试可以支持到15000+的并发连接,付测试程序) 2、支持delphi的所有版本(d5以及以上版本都可以支持) 3、支持tcp服务端和客户端、异步通讯机制 4、在封装中自动高效处理粘包、异步通讯内存管理等较烦人的问题,也是容易导致不稳定的因素,提供外部使用的简明接口 5、最重要的是使用和开发都十分简单 :) FAQ: 我能用它做什么? 答:所有用到tcp通讯的地方你都可以用它。 用它封装的服务端或者客户端可以与其它控件或者是其它程序进行通讯吗? 答:可以,底层是标准tcp协议,不会有任何问题。 它有什么示例程序吗? 答:有专门的性能测试程序,也有远程数据库对象ADO版本以及UNIDAC版本的实际封装。 使用它是否需要支付费用?能否提供源代码? 答:完全免费使用,并且提供所有源码,我会做好后续更新为delphi的发展做点力所能及的贡献。 如果我对它进行了改进怎么联系作者? 答:QQ 22900104,马敏钊,邮箱 22900104@qq.com,QQ讨论群 15637473 欢迎加入讨论。 发布时客户端需要附带什么吗? 答:需要附带一个动态库“Svr_intf.dll”100k大小,由于是使用vs2005编译的boost库所以运行时机器上需要安装有微软的c++ vs2005运行库。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值