comp.lang.ada
 help / color / mirror / Atom feed
From: "David C. Hoos, Sr." <david.c.hoos.sr@ada95.com>
Subject: Re: Linking an ADA routine to a program written in C
Date: 1996/09/19
Date: 1996-09-19T00:00:00+00:00	[thread overview]
Message-ID: <01bba5e0$cf06b040$328371a5@dhoossr.iquest.com> (raw)
In-Reply-To: 51p2vu$enf@lal.interserv.com


newmans@ncr.disa.mil wrote in article <51p2vu$enf@lal.interserv.com>...
> 
> I desperately need an explanation of how to link a routine written and
compiled in ADA into a program
> written in C.  For example, I built an ada  test procedure hello.a and
compiled it using the ada compiler.
> The object file produced was called hello01.  This program uses TEST_IO
package to do the output.
> 
> Since the object module hello01 is ELF-32 bit I linked it in with my C
objects using gcc.  But of course,
> I get undefined symbols because I have no idea how to tell gcc about the
TEST_IO package.  
> 
> Does anyone know how this can be done.  
> 
> Also, some people have mentioned that I may have to use a PRAGMA in my C
code to tell the
> compiler that the  routine I am calling  i.e. "hello"  is not a C
subroutine.  C passes arguments from
> right to left.  I believe ADA probably passes them like PASCAL from left
to right.  In C you can declare
> a routine to be type pascal to change the calling sequence to match
PASCAL's.  If anyone has
> any experience calling ADA routines from C please contact me ASAP. 
> 
> 		Thank you! 
>
This is an implementation-dependent thing.  Generally what has to be done
is to tell the Ada compiler that the routine is to be called by a C
compilation unit.  This is done with a pragma such a EXPORT or EXTERNAL,
depending on the implementation.  Consult your compiler documentation,
looking especially for discussions of Interface Programming.

Further, the issue of "withed" packages pretty much requires that your main
program be an Ada program.  If you already have a suitable "main" program
written in C, you would need to put an Ada "wrapper" around the C main. 
The C main might have to be renamed, depending on the Ada implementation,
because some Ada systems use a routine called "main", which would confuse
the linker of there were two "main" symbols declared.

The Ada main program also allows the elaboration code for each compilation
unit to be called before the main program begins execution.

The only kind of Ada unit which can be called from C is one in which there
is NO elaboration code in the unit, or in any of the other Ada units it
"withs".

Hope these ramblings are helpful.
-- 
David C. Hoos, Sr.,
http://www.dbhwww.com
http://www.ada95.com


 




  parent reply	other threads:[~1996-09-19  0:00 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1996-09-18  0:00 Linking an ADA routine to a program written in C newmans
1996-09-18  0:00 ` Larry Kilgallen
1996-09-19  0:00 ` David C. Hoos, Sr. [this message]
1996-09-19  0:00   ` Larry Kilgallen
1996-09-20  0:00     ` Calius
1996-09-20  0:00       ` Chris Brand
1996-09-24  0:00   ` Cyrille Comar
1996-09-25  0:00     ` Larry Kilgallen
1996-09-26  0:00 ` Jens Jakob Jensen
  -- strict thread matches above, loose matches on Subject: below --
1996-09-28  0:00 Robert Dewar
1996-09-28  0:00 ` Larry Kilgallen
1996-10-03  0:00   ` Robert Dewar
1996-10-04  0:00 Larry Kilgallen
1996-10-08  0:00 ` Robert Dewar
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox