SOLUTION: Mixing C and Fortran

From: Tran, Duc-Chi <tranduc_at_statcan.ca>
Date: Thu, 18 Feb 1999 17:00:00 -0500

Many thanks to Ms. Pamela Price and Mr. Burch Seymour and many others who
promptly helped me.
Here is the solution:

(1) To compile the Fortran program, we need two options:
 -nofor_main (to indicate that the Fortran program is only a subroutine)
 -assume nounderscore (so that the underscore is not added to the program
name)

(2) To link using the linker directly (i.e. ld), we need to link with the
object /usr/lib/cmplrs/cc/crt0.o;
 We also needs the options
 -lc (for the C library libc.so or libc.a)
 -lfor (for the Fortran library libfor.so or libfor.a)

Thank you again for the quick and effective help. I really appreaciate
it.

Duc-Chi Tran (613) 951-3626 duc-chi.tran_at_a.statcan.ca
Chief, Systems Support Section / Chef, section du soutien des systèmes
Industry Measures & Analysis Division / Division des mesures et de
l'analyse des industries
Statistics Canada / Statistique Canada
Visit our Web Site / Visitez notre site http://www.statcan.ca
For our employees, visit / Pour nos employés, visitez
http://www.imad.statcan.ca

 -----Original Message-----
From: Tran, Duc-Chi
Sent: Thursday, February 18, 1999 9:26 AM
To: 'alpha-osf-managers'; 'Tran, Duc-Chi (old internet)'
Subject: Mixing C and Fortran

Hello Guru,

We need help badly and urgently. Please ALSO reply directly to my email
tranduc_at_statcan.ca. Thank you.

I cannot create one single executable module from a C program calling a
Fortran 90 subroutine. The link-edit step fails with "unresolved"
reference. And it has to do with my not knowing how to use the flags of
the link-editor (ld) to link to supporting libraries of C and Fortran. To
validate my theorie, I did the following simple test:

(1) I created a simple C program (called test.c) with a printf statement.

(2) I complied and linked it with the cc command as belows and it worked
fine:
  cc -o test test.c

(3) I compiled and linked it SEPARATELY using only the cc command as
belows and it also worked:
  cc -o test.o test.c
  cc -o test test.o

(4) However, when I tried to compile it with cc and link it with ld, it
failed:
  cc -o test.o test.c
  ld -o test test.c
 And the message was "Unresolved: printf"

(5) I read the man pages of cc, F90, and ld very carefully and used all
sort of -L and -l flags, but could not solve the problem

Please help.

Duc-Chi Tran (613) 951-3626 tranduc_at_statcan.ca
Chief, Systems Support Section / Chef, section du soutien des systèmes
Industry Measures & Analysis Division / Division des mesures et de
l'analyse des industries
Statistics Canada / Statistique Canada
Visit our Web Site / Visitez notre site http://www.statcan.ca
For our employees, visit / Pour nos employés, visitez
http://www.imad.statcan.ca
Received on Thu Feb 18 1999 - 22:53:58 NZDT

This archive was generated by hypermail 2.4.0 : Wed Nov 08 2023 - 11:53:39 NZDT