⑴ Cannot open include file: 'gsl/gsl_sf.h'
把gsl_sf.h放到VC98的include目錄下得gsl目錄試試
⑵ 求助:關於GNU Science Library(GSL)編程問題,總是提示缺少libgsl.dll
你可以從網上找到libgsl.dll這個文件,然後把它放到C:\Windows\system32裡面試一試,因為你的程序可能會用到libgsl.dll裡面的函數,但是你的系統裡面沒有這個動態鏈接庫,所以會報錯。
⑶ 如何編譯Windows版本的GSL
GSL全名為GNU Scientific Library,是GNU發起的一個科學計算項目,採用C語言編寫,可以在C/C++開發中廣泛使用。因為是開源項目,在Windows平台下面沒有現成的安裝文件可供使用,一般需要自己編譯這個項目。現在我把自己從網上找的資料和自己編譯的經過匯總一下,寫成這個教程。
在Windows平台上編譯GSL主要使用MinGW和MSYS這兩個工具,
(1)下載安裝 MinGW(安裝時選擇gcc,g++和Make這三項)
(2)下載安裝 MSYS
(3)下載MinGW Utilities 解壓復制到MSYS安裝目錄
(4)下載解壓gsl源碼,
(5)進入gsl目錄,執行命令:
./configure
make
make install
(6)完成編譯之後,在MSYS安裝目錄下的
local/bin有編譯了的gsl動態庫文件libgsl-0.dll libgslcblas-0.dll
local/lib有編譯好了的靜態庫文件libgsl.a libgsl.dll.a libgslcblas.a libgslcblas.dll.a
local/include有編程需要的gsl頭文件
(7)此時你會發現,編譯的結果缺少lib文件,現在我們來生成lib文件
cd /usr/local/bin
pexports libgsl-0.dll >libgsl-0.def
pexports libgslcblas-0.dll >libgslcblas-0.def
這時候就生產了兩個def文件
(8)使用VC6或以上版本的lib命令,生成lib文件,具體如下:
lib /machine:i386 /def:libgsl-0.def
lib /machine:i386 /def:libgslcblas-0.def
(9)動態鏈接庫拷貝到系統的Windows文件夾下面;
將gsl頭文件(local/include裡面的gsl目錄)拷貝到include文件夾下面;
lib文件和*.a文件(local/lib下面)放到Lib文件夾下面,
編譯器tools-options-directories添加Lib路徑和Include路徑
最後一步就是在VC6的工程設置中的object/library moles裡面添加以下內容:
libgslcblas-0.lib libgsl-0.lib
至此,整個gsl的移植工作就完成了。
⑷ 怎樣把GSL鏈接到自己的編譯環境中
如果你用到了矩陣等函數,這還不夠,還得再加上-lgslcblas,連入線性代數庫。於是單個文件編譯,我一般用這條命令:
gcc -g -Wall -std=c99 source.c -o program -lgsl -lgslcblas -lm -O3
source.c 和 program 代換成合適的名字。
⑸ 打開GSL比賽地圖出現的錯誤問題,求幫助
這一句聲明和定義都做了,在程序之前加int i定義,在c文件的程序之前必須加上int i進行定義,再在某一個你要調用該變數的c文件的程序之前再定義(注意第一個調用的c文件要負責附帶初始化該變數。
對於大一點的程序。extern int i=0,有很多c文件和頭文件。如果在頭文件中定義。如果只有頭文件中聲明就會出現沒有定義有警告。如果要在頭文件中定義有以下兩種方法,怎麼能是沒注冊呢,則編譯的時候會出現重復定義的錯誤。
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
SYMBOL!;這一句只是對變數i進行聲明,把你的頭文件中的變數定義前加extern(只是變數聲明不用初始化).obj (222)
出現上述錯誤則是因為變數k重復定義!
對於比較小的程序,然後在一個c文件中定義(該初始化的要初始化),一般只有一個c文件和一個頭文件:用extern來聲明這個問題分別是重復定義了么: K
MODULE:extern int i,這個時候全局變數就必須在頭文件中聲明(不需要初始化),全局變數我們通常會直接定義在c文件中!: 222