2015-04-24 216 views
1

我想編譯一個用FORTRAN編寫的程序,該程序使用DISLIN庫繪製圖表,但所有數據都是雙精度的。我不能失去這個精度,所以將所有內容傳遞給簡單的精度不是一個選項。當我嘗試鏈接到雙精度庫(_D),我還是收到以下錯誤我希望有我掛簡單的精準庫:DISLIN雙精度庫

call graf(-1.D0, 1.D0, -1.D0, 2.D0/10.D0, -1.D0, 1.D0, -1.D0, 2.D0/10.) 
     (1) 
ERROR: Type mismatch in argument 'ax' at (1); passed from REAL(8) to REAL(4). 

我也得到所有繪製報表等這樣的錯誤。我的編譯命令是(gfortran):

gfortran modulename.f95 progname.f95 C:\dislin\disgf_d.a -luser32 -lgdi32 -lopengl32 

請注意,disgf_d是指雙精度庫。有沒有人有任何想法嗎?

相關的代碼:

call metafl("XWIN") 
call disini() 
call graf(-1.D0, 1.D0, -1.D0, 2.D0/10.D0, -1.D0, 1.D0, -1.D0, 2.D0/10.D0) 
do i = 0, m 
    Z(i) = -1.D0 + (2.D0*i)/m 
    Y_Z(i) = Int_g(Z(i)) 
end do 
call curve (Z, Y_Z, m + 1) 
do i = 0, m 
    Y_Z(i) = g(Z(i)) 
end do 
call curve (Z, Y_Z, m + 1) 
call endgrf() 
call disfin() 
+0

該錯誤告訴你,特定參數是*不*雙精度。您需要研究包文檔(或源代碼)以確保您爲每個參數使用正確的類型。 – agentp

+0

我期望'-ldislin_d'作爲雙精度dislin庫的鏈接選項。 –

回答

0

我發現該解決方案與機器代碼在.MOD文件中。當然,這個目標文件必須與雙精度庫相對應,並且在安裝DISLIN之後默認的是.MOD文件引用簡單精度庫。在名爲real64的文件夾中存在另一個dislin.MOD文件,它與雙精度文件相對應,但通常不會像在另一臺機器上編譯的那樣工作。我們必須編譯真正的64文件夾進入主DISLIN目錄dislin.f90文件,替換默認的mod文件,使用gfortran命令:

gfortran -c dislin.f90 

使用-c表明f.90文件奪得」 t被編譯成可執行文件,但被編譯成目標文件。由於它是一個.f90模塊,因此它將是.MOD而不是.o。

然後,使用「使用迪林」,和原始帖子中的命令一樣,所有東西都可以正確編譯鏈接到雙精度庫。

+0

這不是'.mod'文件的工作方式。它們依賴於編譯器,但只包含模塊中定義的變量的接口和描述。此外,像你所顯示的一個單一的命令可以產生許多'.mod'文件,每個模塊出現在源文件中。一些編譯器不會創建任何'.mod'文件,但gfortran完成我寫的內容。對於上面顯示的命令,應該也生成'.o'文件。 –

0

嘗試與線編譯程序改變爲

call graf(-1.E0, 1.E0, -1.E0, 2.E0/10.E0, -1.E0, 1.E0, -1.E0, 2.E0/10.) 

1.0E0和1.0D0分別是單精度和雙精度常數。