回 帖 发 新 帖 刷新版面

主题:求教个问题 关于子例程库的调用

我安装了一个子例程库是fitsio
这是一个FORTRAN和C混合的库
在安装完之后在运行文件的时候
C语言编写的一部分程序可以运行
但是另外一部分程序以及所有fortran编写的程序都无法运行
提示的是子程序没有被定义
我所运行的程序都是例程,不是自己写的,所以应该没有错误
这是为什么啊?
还有fortran在调用外部文件的时候,有类似于C中的include语句吗
还是在子例程库中不用加语句就可以直接运行啊?
求高手赐教啊

回复列表 (共3个回复)

沙发

有INCLUDE,前面也不用加#。不过现在更多的是用USE(90后风格)。很一部分SUBROUTINE都不需要声明直接就可以调用。

楼主可以把:
1、库中需要调用的函数的形式列出;
2、调用处及相关变量的声明列出;
3、编译及链接时的错误列出。
这样便于大家讨论:)

板凳

感谢二楼的提醒
那么我把我的代码列出来
程序代码是这样的
      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 楼

你的make里没有加子例程所在的库啊:)也就是g77里没有加 fitsio.so(诸如此类)的东东:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册