vs2010编译boost c++库 && blitz++

来源:互联网 发布:星际战甲库伯数据模块 编辑:程序博客网 时间:2024/06/05 12:46

最近开始学习使用boost以及blitz++,接下来把它们的基础以及用vs2010编译的过程记录如下。

基础知识:(来自于维基百科与百度百科)

boost库

boost C++ 库(Libraries)是一组扩充C++功能性的经过同行评审(Peer-reviewed)且开放源代码程序库。大多数的函数为了能够以开放源代码、封闭项目的方式运作,而授权于Boost软件授权条款(Boost Software License)之下。许多Boost的开发人员是来自C++标准委员会,而部份的Boost库成为C++的TR1标准之一。

可下载Boost C++ Libraries安装boost库。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库。里面有许多具有工业强度的库,如graph库。

blitz++

Blitz++ 最新的版本中提供了数组和向量 ( 即矩阵 ), 随机数产生器 , 小向量和矩阵 。

值得注意的是 , 与其它数值计算包相比较 ,blitz 是非常有个性的 , 它不求高大全 , 如它并没有提供所有的矩阵操作功能 , 如求特征向量 ,FFT 分析 等 . 它的特点在于面向对象、数组操作语法和模板操作( But the main focus of blitz is on array syntax   and stencil operations ) [4] 。矩阵操作功能,想起 STL 中的 VALARRY 了吗? VALARRAY 中的功能这里都实现和加强了。这个在测试项目 MT1 中可以初步显示 .

编译过程

1>编译boost

      1、下载

下载网址http://www.boost.org/,在网页上可以看到最新版,我找的时候,最新版本是boost_1_55_0


接下来对其进行解压,我个人解压到路径D:\Program Files下。

2、运行bootstrap.bat生成bjam.exe可执行文件

此时有两种方法,
1是直接进入boost解压后的路径D:\Program Files\boost_1_55_0\boost_1_55_0,找到bootstrap.bat,双击,几秒钟后,自动会生成b2.exe  bjam.exe
2、VS2010的命令行来实现

点击开始—>所有程序--> Microsoft Visual Studio 2010-->VisualStudio tools--> Visual Studio 命令提示(2010)。

打开Visual Studio 命令提示(2010)后进入boost的解压目录:

在命令提示符上输入   cd   D:\Program Files\boost_1_55_0\boost_1_55_0

然后输入 bootstrap.bat,具体如下图所示:


接下来会在文件夹中自动生成b2.exe  bjam.exe


3、编译bjam.exe生成库文件

注意:在编译之前,需要先修改user-config.jam,这个文件在D:\Program Files\boost_1_55_0\boost_1_55_0\tools\build\v2中,用写字板打开,最文件的最末尾加上以下修改内容,然后保存关闭文件。

修改内容如下:

using msvc : 10.0 : : <compileflags>/wd4819  <compileflags>/D_CRT_SECURE_NO_DEPRECATE  <compileflags>/D_SCL_SECURE_NO_DEPRECATE  <compileflags>/D_SECURE_SCL=0 ;

接下来就是正式编译bjam.exe了。

 Visual Studio 命令提示(2010)中输入以下命令:

bjam stage --toolset=msvc-10.0 --without-python --stagedir="D:\Program Files\boost_1_55_0\boost_1_55_0\bin\vc10" link=static runtime-link=shared threading=multi debug release

具体如图所示:


图中红色标出的地方需要注意:msvc-10.0 是表示了vs的版本是2010。第二个红色圈表示你想把生成的lib文件放在什么目录。这个也需要注意,要不然以后都找不到生成的文件。经过若干时间后,bjam.exe编译完成。


bjam.exe具体的命令解释如下:

stage/installstage指定boost C++库安装在名为stage的子目录下,可又--stagedir指定安装路径;install在系统范围内安装(windows下安装目录为C\Boost,而在linux中则是/usr/local),目标目录也可以由--prefix指出。

stage表示只生成库(dlllib),install还会生成包含头文件的include目录。【未经验证】

--toolset:指定C++的编译器[ VS2008对应--toolset=msvc-9.0,vs2010对应--toolset=msvc-10.0 ]

--build-type:创建何种方式的库。缺省情况下,该选项设为minimal,即只创建发布版。对于那些想用Visual Studio 或GCC 构建他们项目的调试版的开发者来说,可能是一个问题。因为这些编译器会自动尝试链接调试版的Boost C++ 库,这样就会给出一个错误信息。在这种情况下,应将--build-type  选项设为complete,以同时生成Boost C++ 库的调试版和发布版,当然,所需时间也会更长一些。

link:创建动态[  link=shared ]还是静态[link=static]的库.

runtime-link:指定C++运行时库是静态[ runtime-link=static ]链接还是动态[ runtime-link=shared ]链接

threading:单[  threading=single ]/多线程[  threading=multi ]编译。

without/with:选择不编译/编译哪些库。


4、对vs2010的包含文件和库文件进行配置

包含文件中输入:D:\Program Files\boost_1_55_0\boost_1_55_0

库文件中输入:D:\Program Files\boost_1_55_0\boost_1_55_0\bin\vc10\lib

当然也可以先设置环境变量,然后使用$(BOOST)等。

5、例子测试:(来源于维基百科)


 #include <boost/numeric/ublas/vector.hpp>#include <boost/numeric/ublas/matrix.hpp>#include <boost/numeric/ublas/io.hpp>#include <iostream> using namespace boost::numeric::ublas; /* 举例 "y = Ax"  */int main () {      vector<double> x (2);      x(0) = 1; x(1) = 2;       matrix<double> A(2,2);      A(0,0) = 0; A(0,1) = 1;      A(1,0) = 2; A(1,1) = 3;       vector<double> y = prod(A, x);       std::cout << y << std::endl;      return 0;}

PS:记得在例子测试中,进行路径的设置。


接下来是对blitz++的配置

1、下载

下载路径http://sourceforge.net/projects/blitz/files/blitz,最新版本貌似是Blitz++0.9。

然后解压到路径D:\Program Files\blitz-0.9\blitz-0.9。

2、安装 Blitz-VS.NET项目

打开解压后的路径,在其中会发现有个压缩文件Blitz-VS.NET.zip,如下左图所示:


接下来把它解压到路径D:\Program Files\blitz-0.9中,最后你会发现在路径D:\Program Files\blitz-0.9下有两个文件夹,如上右图所示:

Blitz-VS.NET的目录结构:

Blitz\

Blitz-Testsuite\

Blitz-Library.ncb

Blitz-Library.sln

blitz 目录里面还有一个 VC 项目文件 , 这个项目是用来生成 blitz.lib 文件的,稍后我们将提到如何设置生成。

3)    生成 blitz.lib

启动 Visual Studio, 设置 : 工具 -> 选项 -> 项目 ->VC++ 目录 , 在 ” 包含文件 ” 中添加 blitz-0.9 的路径 ( 即 cl 中的 /I 参数 ) ,如 

D:\Program Files\blitz-0.9\blitz-0.9

D:\Program Files\blitz-0.9\blitz-VS.NET

 

使用 Visual Studio打开为 D:\Program Files\blitz-0.9\Blitz-VS.NET\blitz\ blitz.vcproj, 如上所述 , 我们正是用这个项目来产生 blitz.lib 的 . 它所使用的源文件就是blitz-0.9\src\globals.cpp, 因为代码原作者为了保持代码的唯一份 , 所以没有包括到这个 forvs.net 的压缩包中 , 你要将原 Blitz++ 目录下的 src 目录拷贝到这里 . 如将D:\Program Files\blitz-0.9\blitz-0.9\src 拷贝到 D:\Program Files\blitz-0.9\Blitz-VS.NET\src

    编译生成 blitz.lib. 编译时会出现错误提示 , 如 error PRJ0019: 工具从 ”copying blitz_d.lib..” 不必理会 , 这是 blitz 的 BUG, 在 DEBUG目录下已经生成了我们所需的文件 ,debug 版本的为 blitz_d.lib。

此时 , 为了以后的版本都能使用此 lib 文件 , 我们可以配置一下全局选项 :

首先在 \Blitz-VS.NET\ 下新建一 lib 目录 , 将 blitz.lib 和 blitz_d.lib 拷贝进去 . 在工具 -> 选项 -> 项目 ->VC++ 目录 -> 库文件下添加我们 lib 的路径。

4、例子测试

注意:不止要在项目的库文件中添加lib文件的路径,还要在包含文件中添加

D:\Program Files\blitz-0.9\blitz-0.9

D:\Program Files\blitz-0.9

\blitz-VS.NET

代码如下:

#include <blitz/bzconfig.h>
#include <blitz/array.h>
BZ_USING_NAMESPACE(blitz); 
using namespace std;


int main()
{
complex<int> c(4,8);
cout << c << endl;


Array<int,2> ar(2,2) ;
ar =1,1,
2,2;
cout << ar << endl;
Array<double,2> A(3,3);
A = 1.7,3.5,4.8,
2.6,7.8,9.1,
3.8,8.9,10.3;
cout<<A<<endl;
return 0;

结果图如下:

至此,boost库与blitz++的配置完成。


感谢一些网址以及文库对我的帮助。

http://blog.csdn.net/misskissc/article/details/9793645#comments











0 0
原创粉丝点击