使用GNU Scientific Library(GSL)及GSL的配置(轉自彭軍)

2009年05月26日 12:45

作者:彭軍

郵件:hellotim##foxmail.com

近來幫朋友編譯一個SIFT匹配的程序,可是裏面不僅用到了OpenCV,而且用到了GSL,但是在編譯的過程中,OpenCV的配置是沒有什麼問題了,可是GSL一直不行,在用VC6.0進行編譯的時候,總是出現類似與如下的錯誤:

xform.obj : error LNK2001: unresolved external symbol _gsl_rng_free
xform.obj : error LNK2001: unresolved external symbol _gsl_rng_set
xform.obj : error LNK2001: unresolved external symbol _gsl_rng_alloc
xform.obj : error LNK2001: unresolved external symbol _gsl_rng_mt19937
xform.obj : error LNK2001: unresolved external symbol _gsl_sf_choose
xform.obj : error LNK2001: unresolved external symbol _gsl_rng_uniform_int

一想既然是LINK時的錯誤,肯定是lib文件有關係了。看到GSL的lib文件夾下面並沒有後綴名爲lib的文件。但是又看到有後綴名爲def的文件,我知道通過def文件是可以導出dll和lib文件的了。而且在網絡上也看到可以用VS的lib命令來導出適合VS用的.lib文件,於是打開cmd窗口。

D:/Program Files/GnuWin32/lib>lib /machine:i386 /def:libgsl.def
Microsoft (R) Library Manager Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

   Creating library libgsl.lib and object libgsl.exp

D:/Program Files/GnuWin32/lib>lib /machine:i386 /def:libgslcblas.def
Microsoft (R) Library Manager Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

   Creating library libgslcblas.lib and object libgslcblas.exp

D:/Program Files/GnuWin32/lib>

可以看到lib文件夾下已經有了libgsl.lib和libgslcblas.lib這樣的話,我們只要將這兩個lib文件添加到工程Link頁中就可以了,如下:

當然了,要用GSL的話,也需要在VC的目錄中添加GSL的include目錄、lib目錄和bin目錄,如下:

從添加的Include目錄可以看出,當你用GSL裏面的頭文件時,需要類似與這樣的引用:

#include <gsl/gsl_rng.h>

當然,如果你在添加Include目錄是添加的是:D:/Program Files/GnuWin32/include/gsl

那麼就不需要前面的gsl,只要如此引用就可以了:#include <gsl_rng.h>

還有一點需要說明的是GSL中已經沒有gsl_rng_free.h了,所以你需將其改爲gsl_rng.h

你可以在這裏下載這個經典SIFT的圖像匹配程序的VC程序:

http://download.csdn.net/source/1352136

你可以在這裏下載GSL(GNU Scientific Library)1.8:

http://download.csdn.net/source/1352070

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章