From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,52882f38318f3520 X-Google-Attributes: gid103376,public From: kilgallen@eisner.decus.org (Larry Kilgallen) Subject: Re: Linking an ADA routine to a program written in C Date: 1996/09/19 Message-ID: <1996Sep19.075836.1@eisner>#1/1 X-Deja-AN: 183919070 x-nntp-posting-host: eisner.decus.org references: <51p2vu$enf@lal.interserv.com> <01bba5e0$cf06b040$328371a5@dhoossr.iquest.com> x-nntp-posting-user: KILGALLEN x-trace: 843134325/3350 organization: LJK Software newsgroups: comp.lang.ada Date: 1996-09-19T00:00:00+00:00 List-Id: In article <01bba5e0$cf06b040$328371a5@dhoossr.iquest.com>, "David C. Hoos, Sr." writes: > 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". Although the restrictions listed may be overly broad. Although I don't really use C, I do use shareable libraries with DEC Ada on VMS (both platforms), and from what I understand of the mechanism using C, even as the main program, should not be a barrier to elaboration. Perhaps I have just been lucky, but with 160,000 lines of code, I have never had to worry about "elaboration", it "just happens". It uses the LIB$INITIALIZE mechanism, which would surely not be inhibited by intermixing C. Larry Kilgallen