我正在尝试编译用FORTRAN编写的程序,该程序使用DISLIN库绘制图形,但所有数据都是双精度的。我不能失去这种精确度,所以将所有内容都传递到简单的精度不是一种选择。当我尝试链接到双精度库(_d)时,如果我链接到简单的精度库,我仍然会得到以下错误:
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 :(得分: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分别是单精度和双精度常量。
答案 1 :(得分:0)
我发现该解决方案位于带有机器代码的.MOD文件中。当然,此目标文件必须与双精度库相对应,安装DISLIN后的默认值是.MOD文件引用简单精度库。在名为real64的文件夹中存在另一个与双精度文件对应的dislin.MOD文件,但是这通常不会像在另一台机器上编译那样工作。必须使用gfortran命令将real 64文件夹中的dislin.f90文件编译到主dislin目录中,替换默认的.MOD文件:
gfortran -c dislin.f90
-c表示f.90文件不会编译为exectuable,而是编译为目标文件。由于它是.f90模块,因此它将是.MOD而不是.o。
然后,使用“use dislin”和与原始帖子相同的命令,可以正确编译链接到双精度库的所有内容。