- 积分
- 18
- 注册时间
- 2006-9-6
- 仿真币
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2011-1-12 18:59:00
|
显示全部楼层
来自 江苏无锡
本帖最后由 myleader 于 2011-1-13 18:21 编辑
注意cmake当中那个编译动态库的勾不要选,因为这样会编译出错。
动态库的编译方法如下,首先编译好静态库.a,然后再创建一个临时文件夹tmp
在命令行进入这个目录,然后
ar x ../blas.a
如果你的静态库文件名不是blas.a,那就把你的文件名输进去。接着回到原来的目录,也就是tmp的上一级
gfortran -shared -Wl,-soname=blas.so -o blas.so tmp/*.o
这样动态库blas.so就出来。lapack的方法类似,先清空tmp目录,接着进入tmp目录
ar x ../lapack.a
cd ..
gfortran -shared -Wl,-soname=lapack.so -o lapack.so tmp/*.o -L. blas.a
这样lapack的动态库也出来了,然后把.a和.so文件扔到mingw的lib目录就可以在mingw中用了
不过这个库在vc中使用会有问题,如果想在vc中使用,还需要一些处理。
首先在生成动态库的时候,把.so换成.dll,这样就会生成blas.dll和lapack.dll
然后在命令行运行mingw的工具
pexports blas.dll>blas.def
pexports lapack.dll>lapack.def
然后使用vc的命令行工具,就是vc开始菜单里面那个visual studio tools->command prompt,然后运行
lib /machine:x64 /def:blas.def
lib /machine:x64 /def:lapack.def
这样就会生成新的blas.lib和lapack.lib,把这两个lib和dll放到vc的目录就可以用了
我用armadillo试验了一下,armadillo的网址在
http://arma.sourceforge.net/
软件包里面自带了两个例子,其中第二个例子要用到lapack库,我们用之前生成的blas.dll, blas.lib, lapack.dll, lapack.lib替代其自带的库文件(1.1.0版自带的好像是lapack-3.1.1,intel编译器编译出来的),然后在第二个例子的项目中设定链接我们自己编译的库文件,编译运行,结果正确。
说实在的,我觉得在windows下还是vc比较好用,而armadillo是对lapack进行c++封装中做的最让人舒服的。在armadillo自己的文档中说自带的库文件是从http://www.fi.muni.cz/~xsvobod2/misc/lapack/
下载的,不过这里目前也只有3.2.1版。lapack -3.2.1版里有一些bug,在3.2.2版中修正了,在官方的release notes中有说明,所以我建议大家还是升级一下比较好;另外从3.3.0版起lapack终于变成完全线程安全的了,所以我也建议大家升级。另外armadillo提到的其他下载站点下载的库文件斯坦福大学的版本古老,田纳西大学的无法在windows下配合armadillo使用,而intel和amd的有版权问题,所以本人写了这篇文章,希望能够帮助大家。 |
|