delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1994/01/19/08:15:33

From: root AT ilfb03 DOT tuwien DOT ac DOT at (Gerhard Schneider)
Subject: COFF, the linker and Fortran BLOCK DATA
To: djgpp AT sun DOT soe DOT clarkson DOT edu
Date: Wed, 19 Jan 1994 13:28:19 +0100 (MET)

With the change of djgpp from a.out to COFF we got problems with the
following code structure (the easiest sample code follows):

If you convert a fortran BLOCK DATA statement into C-Code (f2c) and put
the compiled code into a library the linker ignores it.

Sample:

---- makefile ----

all: 
	f2c -a -h -r test1.f
	f2c -a -h -r test2.f
	gcc -c test1.c
	gcc -c test2.c
	ar ruv libtest.a test2.o
	ranlib libtest.a
	gcc -o test1 test1.o test2.o -lf77 -li77 -lm
	gcc -o test2 test1.o -L. -ltest -lf77 -li77 -lm
	coff2exe test1
	coff2exe test2
	test1.exe
	test2.exe

---- test1.f ----

	PROGRAM TEST1
C
	COMMON /COMM1/ A
C
	PRINT *,A
C
	END

---- test2.f ----

	BLOCK DATA
C
	COMMON /COMM1/ A
C
	DATA A /1/
C
	END

---- test1.c ----
/* test1.f -- translated by f2c (version of 21 October 1993  13:46:10).
   You must link the resulting object file with the libraries:
	-lf77 -li77 -lm   (in that order)
*/

#include "f2c.h"

/* Common Block Declarations */

struct {
    real a;
} comm1_;

#define comm1_1 comm1_

/* Table of constant values */

static integer c__4 = 4;
static integer c__1 = 1;

/* Main program */ MAIN__()
{
    /* Builtin functions */
    integer s_wsle(), do_lio(), e_wsle();

    /* Fortran I/O blocks */
    static cilist io___1 = { 0, 6, 0, 0, 0 };

    s_wsle(&io___1);
    do_lio(&c__4, &c__1, (char *)&comm1_1.a, (ftnlen)sizeof(real));
    e_wsle();

} /* MAIN__ */

/* Main program alias */ int test1_ () { MAIN__ (); }
---- test2.c ----

/* test2.f -- translated by f2c (version of 21 October 1993  13:46:10).
   You must link the resulting object file with the libraries:
	-lf77 -li77 -lm   (in that order)
*/

#include "f2c.h"

/* Common Block Declarations */

struct comm1_1_ {
    real a;
};

#define comm1_1 (*(struct comm1_1_ *) &comm1_)

/* Initialized data */

struct {
    real e_1;
    } comm1_ = { (float)1. };

---- END ----

Thank you for your help

                                             Gerhard Schneider
-- 
Gerhard Schneider                                e-Mail: gs AT ilfb03 DOT tuwien DOT ac DOT at 
Institute of Light Weight Structures (E317)      Tel.:   +43 1 58801 3711     
Technical University of Vienna / Austria         Fax:    +43 1 505 44 68
A-1040 Wien, Gusshausstrasse 27-29                    

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019