我已经强制一个 free-pascal 对象几乎可以与 g77 main 一起工作。问题是 g77 加载程序没有加载 pascal 库,因此任何在 pascal 代码中插入 writeln 的尝试都会失败,因为找不到 FPC-IOCHECK、fpc_get_output ..。没有 I/O 它可以工作。有人知道-lPASCAL 形式的修复程序吗?有 30 年的历史证明了这一步骤的合理性;我完全理解这个请求看起来很愚蠢。谢谢。
我使用 UBUNTU 20.4
g77 -v 说
配置:../src/configure -v --enable-languages=c,c++,f77,pascal --prefix=/usr --libexecdir=/usr/lib --with-gxx-include-dir=/usr /include/c++/3.4 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --program-suffix=-3.4 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug x86_64-linux-gnu 线程模型:posix gcc 版本 3.4.6 (Ubuntu 3.4.6-6ubuntu5)
共有三个单元:
main.f:
10 WRITE (6,'(A,$)') '0 to stop>'
READ (5,*) I
IF (I.EQ.0) STOP
CALL INFACE (I)
GOTO 10
STOP
END
SUBROUTINE PRINTER (I,R)
INTEGER*4 I
REAL*8 R
WRITE (6,*) 'received',I,R
RETURN
END
inter.c
include <stdio.h>
extern void SUB_$$_PROC1_$SMALLINT();
extern void SUB_$$_PRINTNOW_$SMALLINT$REAL();
extern void printer_();
extern void printnow();
extern void inface_(int*);
void inface_(i)
int *i; { int j; SUB_$$_PROC1_$SMALLINT(i); }
void SUB_$$_PRINTNOW_$SMALLINT$REAL(i,r)
int i; double r; {printf("route 3.0.4 "); printer_(&i,&r);}
void printnow_(i,r)
int i; double r; {printf("route 3.2.0 "); printer_(&i,&r);}
分页:
unit sub;
interface
procedure PROC1_(var i:integer);
procedure printnow_(i:integer; r:real); external;
implementation
procedure PROC1_(var i:integer);
var r:real;
begin r:=2*sqrt(i); printnow_(i,r); {writeln('a');} end;
end.
我已经编译了
fpc -Un sub.p(版本 3.0.4 和 3.2.0)
g77 main.f inter.c sub.o
所有与 writeln 一起评论的作品,否则链接将失败。请注意,调用的 C 例程与 fpc-3.0.4 和 fpc-3.2.0 不同。