Visual Studio 2010下安装和使用blitz++指南
原文为“Visual Studio 2008下安装和使用blitz++详细指南”,但经过修改后,可以推广到Visual studio 2010.
一.起因
安装和使用 blitz++ 时经常遇到问题, Blitz 的官方文档也不清楚 , 只好自己来 , 花了不少时间才初步弄清楚。
二. Blitz 简介
大家知道 Fortran 是公认的科学计算编程语言 , 大量数值计算库都是基于 fortran 的 , 如 lapack. 而 blitz++ 则为科学计算人员提供了面向对象的 C++ 的数值计算程序库 , 速度能与fortran77/90 匹配 .
用过 matlab 的人知道 , matlab 是一种基于矩阵的第四代语言 , 它将每个变量都视作矩阵 , 赋值起来比起 c/c++/java 等主流语言起来非常方便 , 而 blitz++ 也提供了这种矩阵的强大操作 , 而且性能比起 matlab 要快很多 , 这是因为两种的语言特性所决定的 .
Blitz++ 最新的版本中提供了数组和向量 ( 即矩阵 ), 随机数产生器 , 小向量和矩阵 .
值得注意的是 , 与其它数值计算包相比较 , blitz 是非常有个性的 , 它不求高大全 , 如它并没有提供所有的矩阵操作功能 , 如求特征向量 ,FFT 分析 等 . 它的特点在于面向对象、数组操作语法和模板操作( But the main focus of blitz is on array syntax and stencil operations ) [4] 。矩阵操作功能,想起 STL 中的 VALARRY 了吗? VALARRAY 中的功能这里都实现和加强了。这个在测试项目 MT1 中可以初步显示 .
在其他平台中的安装,需要参考解压后目录下的install文件,相关配置文件采用GNU 的autoconfig,文件名为configure。
三.安装与测试
1) 安装 Blitz++-0.10 通用代码
首先要安装最原始的代码包 , 源代码是跨平台的 , 只要 blitz 支持 .目前的最新版本是Blitz++0.10,下载地址为:
https://sourceforge.net/projects/blitz/
解压缩 , 如到E:\技术资料\编程\c++\blitz-0.10
2) 安装 Blitz-VS.NET项目
如果想 blitz 能在 VS.net 下使用 , 就要定义相应的宏 , 使用相应的头文件 , lib 和 blitz++ 提供的类就行 . 而宏定义 ,Lib 的编译项目文件 , 这些工作 Julian Cummings 已经为我们做好 . 在 以上网址:
https://sourceforge.net/projects/blitz/
中下载的源代码中包含有Blitz-VS.NET.zip
将 Blitz-VS2010.zip 解压缩 , 它的主目录与 E:\技术资料\编程\c++\blitz-0.10相同 , 我们假设它为
E:\技术资料\编程\c++\blitz-0.10\Blitz-VS2010
E:\技术资料\编程\c++\blitz-0.10\Blitz-VS2010\blitz\ms里面是bzconfig.h, 它定义了 blitz 相关的宏变量 , 如 BZ_HAVE_COMPLEX, BZ_HAVE_STL 等等 , 这是每个项目必须用到的 .
blitz 目录里面还有一个 VC 项目文件 , 这个项目是用来生成 blitz.lib 文件的,稍后我们将提到如何设置生成。
3) 生成 blitz.lib
使用 Visual Studio打开为 E:\技术资料\编程\c++\blitz-0.10\Blitz-VS2010\blitz\ blitz.vcxproj, 如上所述 , 我们正是用这个项目来产生 blitz.lib 的 . 它所使用的源文件就是E:\技术资料\编程\c++\blitz-0.10\src\globals.cpp, 因为代码原作者为了保持代码的唯一份 , 所以没有包括到这个 for vs.net 的压缩包中 , 你要将原 Blitz++ 目录下的 src 目录拷贝到这里 . 如将E:\技术资料\编程\c++\blitz-0.10\src 拷贝到 E:\技术资料\编程\c++\blitz-0.10\Blitz-VS2010\src。
Vs2010中,需要右键点击项目名称,在属性—>配置属性—>vc++包含目录,添加E:\技术资料\编程\c++\blitz-0.10,E:\技术资料\编程\c++\blitz-0.10\Blitz-VS2010。
编译生成 blitz.lib. 在 DEBUG 或 release 目录下已经生成了我们所需的文件 ,debug 版本的为E:\技术资料\编程\c++\blitz-0.10\Blitz-VS2010\blitz\lib\Win32\ blitz_d.lib, release 版本的为 E:\技术资料\编程\c++\blitz-0.10\Blitz-VS2010\blitz\Win32\Debug\blitz.lib.
4) 编译和测试 blitz-testsuit
用Visual Studio打开 E:\技术资料\编程\c++\blitz-0.10\Blitz-VS2010\Blitz-Library.sln, 里面包括了 54 个测试用例 。
将E:\技术资料\编程\c++\blitz-0.10下的 testsuite 目录拷贝到 E:\技术资料\编程\c++\blitz-0.10\Blitz-VS2010, 原因也是为了保持代码的唯一性 , 据作者所说。
拷贝E:\技术资料\编程\c++\blitz-0.10\blitz到E:\技术资料\编程\c++\blitz-0.10\Blitz-VS2010,这是添加头文件。
确定项目选项输入库为 blitz_d.lib 或 blitz.lib(一般是这样子的)
编译 , 执行 .
四.在自己的项目中使用
一个很简单的例子 ,
新建个人项目后 ,添加 lib 或正确配置了 lib 的路径 : 将 blitz.lib 拷贝到项目下或在项目属性中配置好库目录;同时配置包含目录。如:包含目录为: E:\技术资料\编程\c++\blitz-0.10\Blitz-VS2010,库目录为:E:\技术资料\编程\c++\blitz-0.10\Blitz-VS2010\blitz\lib\Win32。
#include <blitz/bzconfig.h>
#include <blitz/array.h>
BZ_USING_NAMESPACE(blitz)
int main(int argc, char* argv[])
{
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;
cin.get();
return 0;
}
在编译时 , 各种配置都要非常小心 , 一不小心就会出错 , 按照以上的步骤一步一步来 , 应该不会有太大的错误