回 帖 发 新 帖 刷新版面

主题:在64位LINUX系统下用F77和C混编读写超100G的特大二进制文件问题

本人用F77和C混编读写超100G的特大二进制文件的程度,主程序和计算用F77,读写用C,本程序在UNIX下应用正常,移植到64位LINUX下出问题乐,请高手老师分别给出F77和C的编辑选项为盼!!!关键程序如下:
  PARAMETER (LTRMAX=36200)
  INTEGER*2 DATAK1(LTRMAX)
  INTEGER*4 DATAK2(LTRMAX)
  EQUIVALENCE (DATAK1(1),DATAK2(1))
  IUNIT1=BOPEN(IFILE1,0)
  C ___________ READ 3200 BYTES REEL HEAD _________________________
  CALL BREAD(IUNIT1,3200,DATAK2,IST)
  IF(IST.LE.0) THEN
  WRITE(*,*) 'READ 3200 BYTES REEL HEAD ERROR !'
  STOP
  END IF
C ___________ READ 400 BYTES FILE HEAD __________________________
  CALL BREAD(IUNIT1,400,DATAK2,IST)
  IF(IST.LE.0) THEN
  WRITE(*,*) 'READ 400 FILE HEAD ERROR !'
  STOP
  END IF
  NS1=DATAK1(11) 返回的这个值不对
  IFORMT=DATAK1(13) 返回的这个值也不对
  stop
  end
  SUBROUTINE BREAD(IUNIT,LEN,IBUF,ISTAT)
  INTEGER*4 IUNIT,IBUF(1),ISTAT,bbread
  integer*4 len
  istat=bbread(IUNIT,IBUF,len)
  RETURN
  END
 int bbread_(fd1_pf,cbuf,len_pf)
char cbuf[];
int *fd1_pf;
int *len_pf;
 {
  int len;
  int fd1,n;
  len= *len_pf;
  fd1= *fd1_pf;
/* printf("len=%d,fd1=%d\n",len,fd1);*/ 这些值显示是对的
  n=read(fd1,cbuf,len);
/* printf("n=%d\n",n);*/ n显示也是对的
  return(n);
 }
请大家看看问题在哪里,怎么改   

回复列表 (共14个回复)

沙发

用gfortran试

如果行,那就是f77的bug

板凳


问题是在NUIX系统下没有问题,而64为LINUX下没有gfortran
32位LINUX下有f77,g77,gcc,cc,gfortran

3 楼

64位怎么会没有呢?要不董兄编译一个64位的给他?

4 楼

Linux下懒得编译,直接用fedora或ubuntu提供的,32位/64位都有

5 楼

哈哈:)对了董兄,gcc有交叉编译器版本不?现成的,我不知道在哪儿能下着:)最好是全平台的,windows下用:)

6 楼

[quote]哈哈:)对了董兄,gcc有交叉编译器版本不?现成的,我不知道在哪儿能下着:)最好是全平台的,windows下用:)[/quote]
有很多啊
不知道你要从哪到哪的交叉编译器
这个比较杂,嵌入式知道的多些
我觉得最好不用windows平台的gcc交叉编译器,虽然也有,但是编译速度不可和Linux下同日而语,而且交叉的一般都编译成static的。

7 楼

嘿嘿,俺是帮人问滴。他貌似需要的平台不固定,估计是想接私单吧。我对这块儿了解还真不多,不知道到哪儿找去:)因为不知道交叉编译器的E文是啥:)哈哈:)

8 楼

需要平台不固定,那么就得使用好几个交叉编译器,不能在一个里面包裹的。

英文叫 cross compiler

9 楼

喔也,谢谢啦,回头我叫他自个儿找找吧:)

10 楼

谢谢各位的指导!
    我的64位LINUX系统上确定没安装gfortran编译器,哪位朋友老师能提供的话不甚感激!
    我的32位LINUX系统下装有gfortran编译器,用ld -V查显示:
  GNU ld version 2.15.92.0.2 20040927
  Supported emulations:
   elf_x86_64
   elf_i386
   i386linux
 说明有64位库,但不知怎么用,请老师指教为盼!!!
    谢谢!

我来回复

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