作者zxvc (乐於助人)
看板C_and_CPP
标题[心得] 手动编译GSL for MSVC
时间Tue Aug 5 11:42:13 2008
这篇文章会教你如何编出for MSVC的gsl library。
如果你想学习如何用Visual C++ link MinGW产生的dll档先别急着左转,
下面有网址会教你。
最近要用到一些线性代数的计算。
因为考虑到C/C++的效能较MATLAB好(老板的经验),
所以决定使用C/C++的linear algebra libraries。
最有名的linear algebra library莫过於LAPACK,
但是它是用Fortran写的,我想用C/C++ XD
虽然有人port LAPACK到C++,但很久都没有更新了。
後来我想到GSL,就去GSL官网找,发现没有binaries for Windows。
虽然非官网有人有编好的gsl for Windows,但已两年没有更新。
我仍然想试试自己编译gsl-1.11看看。
我就下载了gsl-1.11的source,看INSTALL,gsl可以在cygwin下编译、
也可以在MSYS下编译。由於自己体验过cygwin的效能很...,
所以决定用MSYS & MinGW编。
我的MinGW是安装Qt Open Source 4.4.0时一起装的,
所以我还少MSYS,所以我又去MinGW的官网下载了MSYS 1.0.10。
首先编译gsl。
打开MSYS:
tar zxvf gsl-1.11.tar.gz
cd gsl-1.11
./configure
make
make install
这样就编完了。
但是去/usr/local/lib却只发现libgsl.a、libgsl.dll.a、...这几个档案,
没有发现libgsl.lib。
但在/usr/local/bin发现了libgsl-0.dll、libgslcblas-0.dll这两个档案。
但我目标其实要能在Visual C++下使用gsl。
因为我已经编好Qt for Visual C++ 2008,我想用Qt开发我的界面,
gsl为使用的linear algebra library。
所以我试着在Visual C++ 2008下找了个gsl的范例程式,
然後link /usr/local/lib的档案libgsl.a、libgsl.dll.a,
但都失败,不是无法link,就是执行时期挂掉。
後来我不死心,试着去google搜如何用MinGW产生给VC++用的.lib档。
果然给我搜到了,就在MinGW的Wiki找到了。
http://www.mingw.org/MinGWiki/index.php/MSVC-MinGW-DLL
原来MinGW在编译libraries时候可以给参数产生一个叫def的档案。
有了它,然後用Visual Studio的lib指令就可以产生lib档。
但问题是我之前编译完gsl并没有发现仼何def档。
难道要我修改gsl的Makefile加上产生def的参数,重编一次吗?
太困难了,况且我也不太会改。
虽然我对def、lib、exp这些档案的关系不是非常的了解,
但我作了一个大胆的猜想,
理论上dll档里面的资讯应该是可以用某个程式汇出成def。
果然在上面那个网址就有提到mingw-utils package的pexports可以办得到。
我就又去官网下载了mingw-utils装。
然後试着产生libgsl-0.dll的lib档:
cd /usr/local/bin
pexports libgsl-0.dll >libgsl-0.def
lib /machine:i386 /def:libgsl-0.def
结果真的产生了libgsl-0.lib。
然後用Visual C++ 2008 Express重编我的gsl范例,就成功执行了。
有图有真相:
http://p8.p.pixnet.net/albums/userpics/8/3/553683/1217906585.png
那个范例程式是从GSL网站找的:
http://www.gnu.org/software/gsl/manual/html_node/An-Example-Program.html
我用Visual C++ 2008编,输出结果是:
-1.775967713143382
600e-01
我用MinGW编,输出结果是:
-1.775967713143382
900e-01
GSL网站输出结果是:
-1.775967713143382
920e-01
不知道这是否是合理的误差?
--
西方三圣:
http://p8.p.pixnet.net/albums/userpics/8/3/553683/1193661731.jpg
《佛说阿弥陀经》
http://web.cc.ncu.edu.tw/~93501025/amtf.doc
《观世音菩萨普门品》
http://web.cc.ncu.edu.tw/~93501025/pmp.doc
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.221.31
1F:→ zxvc:原来Borland的implib也是用类似的手法从dll产生lib档。 08/06 08:47
2F:推 BrianCashman:不用搞得这麽复杂,只要取得正确的sln与vcproj范例 09/03 15:16
3F:→ BrianCashman:往後的更新都可以直接以VC编译 09/03 15:17
5F:→ zxvc:推荐B大的作法,用VC compile出来的档给VC用。最好不要像我 04/19 21:51
6F:→ zxvc:用MinGW compile libraries给VC用。 04/19 21:51
7F:→ zxvc:因为各家compiler有不相容的情形是很常见的。 04/19 21:52
8F:→ zxvc:就连Microsoft自家compilers compile出来的东西都有不相容。 04/19 21:54