0

我已经强制一个 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 不同。

4

0 回答 0