主题:求教个问题 关于子例程库的调用
feng299
[专家分:0] 发布于 2011-05-19 16:09:00
我安装了一个子例程库是fitsio
这是一个FORTRAN和C混合的库
在安装完之后在运行文件的时候
C语言编写的一部分程序可以运行
但是另外一部分程序以及所有fortran编写的程序都无法运行
提示的是子程序没有被定义
我所运行的程序都是例程,不是自己写的,所以应该没有错误
这是为什么啊?
还有fortran在调用外部文件的时候,有类似于C中的include语句吗
还是在子例程库中不用加语句就可以直接运行啊?
求高手赐教啊
回复列表 (共3个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2011-05-19 22:52:00
有INCLUDE,前面也不用加#。不过现在更多的是用USE(90后风格)。很一部分SUBROUTINE都不需要声明直接就可以调用。
楼主可以把:
1、库中需要调用的函数的形式列出;
2、调用处及相关变量的声明列出;
3、编译及链接时的错误列出。
这样便于大家讨论:)
板凳
feng299 [专家分:0] 发布于 2011-05-19 23:50:00
感谢二楼的提醒
那么我把我的代码列出来
程序代码是这样的
program writeimage
integer status,unit,blocksize,bitpix,naxis,naxes(2)
integer i,j,group,fpixel,nelements,array(300,200)
character filename*80
logical simple,extend
status=0
filename='ATESTFILE.FITS'
call ftgiou(unit,status)
blocksize=1
call ftinit(unit,filename,blocksize,status)
simple=.true.
bitpix=16
naxis=2
naxes(1)=300
naxes(2)=200
extend=.true.
do j=1,naxes(2)
do i=1,naxes(1)
array(i,j)=i+j
end do
end do
group=1
fpixel=1
nelements=naxes(1)*naxes(2)
call ftpprj(unit,group,fpixel,nelements,array,status)
call ftpkyj(unit,'EXPOSURE',1500,'Total Exposure Time',status)
call ftclos(unit, status)
call ftfiou(unit, status)
end
运行程序的错误提示为:
make ex1
g77 -g -O2 -Dg77Fortran -fPIC ex1.f -o ex1
/tmp/cczm9efv.o: In function `MAIN__':
/home/XWF/fitsio/ex1.f:16: undefined reference to `ftgiou_'
/home/XWF/fitsio/ex1.f:20: undefined reference to `ftinit_'
/home/XWF/fitsio/ex1.f:32: undefined reference to `ftphpr_'
/home/XWF/fitsio/ex1.f:45: undefined reference to `ftpprj_'
/home/XWF/fitsio/ex1.f:48: undefined reference to `ftpkyj_'
/home/XWF/fitsio/ex1.f:51: undefined reference to `ftclos_'
/home/XWF/fitsio/ex1.f:52: undefined reference to `ftfiou_'
collect2: ld 返回 1
make: *** [ex1] 错误 1
这是一个例程,所以我觉得程序不能有错误,请高手帮帮忙!
1,7 顶端
3 楼
cgl_lgs [专家分:21040] 发布于 2011-05-20 07:33:00
你的make里没有加子例程所在的库啊:)也就是g77里没有加 fitsio.so(诸如此类)的东东:)
我来回复