主题:在64位LINUX系统下用F77和C混编读写超100G的特大二进制文件问题
grisys
[专家分:50] 发布于 2011-06-13 21:58:00
本人用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个回复)
沙发
dongyuanxun [专家分:7180] 发布于 2011-06-13 22:05:00
用gfortran试
如果行,那就是f77的bug
板凳
grisys [专家分:50] 发布于 2011-06-13 23:37:00
问题是在NUIX系统下没有问题,而64为LINUX下没有gfortran
32位LINUX下有f77,g77,gcc,cc,gfortran
3 楼
cgl_lgs [专家分:21040] 发布于 2011-06-14 01:20:00
64位怎么会没有呢?要不董兄编译一个64位的给他?
4 楼
dongyuanxun [专家分:7180] 发布于 2011-06-14 04:59:00
Linux下懒得编译,直接用fedora或ubuntu提供的,32位/64位都有
5 楼
cgl_lgs [专家分:21040] 发布于 2011-06-14 07:54:00
哈哈:)对了董兄,gcc有交叉编译器版本不?现成的,我不知道在哪儿能下着:)最好是全平台的,windows下用:)
6 楼
dongyuanxun [专家分:7180] 发布于 2011-06-14 13:52:00
[quote]哈哈:)对了董兄,gcc有交叉编译器版本不?现成的,我不知道在哪儿能下着:)最好是全平台的,windows下用:)[/quote]
有很多啊
不知道你要从哪到哪的交叉编译器
这个比较杂,嵌入式知道的多些
我觉得最好不用windows平台的gcc交叉编译器,虽然也有,但是编译速度不可和Linux下同日而语,而且交叉的一般都编译成static的。
7 楼
cgl_lgs [专家分:21040] 发布于 2011-06-14 14:43:00
嘿嘿,俺是帮人问滴。他貌似需要的平台不固定,估计是想接私单吧。我对这块儿了解还真不多,不知道到哪儿找去:)因为不知道交叉编译器的E文是啥:)哈哈:)
8 楼
dongyuanxun [专家分:7180] 发布于 2011-06-14 15:06:00
需要平台不固定,那么就得使用好几个交叉编译器,不能在一个里面包裹的。
英文叫 cross compiler
9 楼
cgl_lgs [专家分:21040] 发布于 2011-06-14 15:15:00
喔也,谢谢啦,回头我叫他自个儿找找吧:)
10 楼
grisys [专家分:50] 发布于 2011-06-15 10:34:00
谢谢各位的指导!
我的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位库,但不知怎么用,请老师指教为盼!!!
谢谢!
我来回复