最近开始学习使用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可执行文件
点击开始—>所有程序--> 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/install:stage指定boost C++库安装在名为stage的子目录下,可又--stagedir指定安装路径;install在系统范围内安装(windows下安装目录为C:\Boost,而在linux中则是/usr/local),目标目录也可以由--prefix指出。
stage表示只生成库(dll和lib),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