comp.lang.ada
 help / color / mirror / Atom feed
* GPS example fails to compile
@ 2006-06-21 20:43 Xcriber51
  2006-06-21 20:56 ` Pascal Obry
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: Xcriber51 @ 2006-06-21 20:43 UTC (permalink / raw)


Hi

After finally deciding to dive into the world of a language that requires
you to write...

    function Get_It (n: Integer) return Integer;

..what you can say in C as...

    int get_it (int n);
    
..I have downloaded the much-touted GPS IDE. 

Have I pissed you off already? Ok, that was just to get your attention,
forget that.

Seriously, after installing the IDE, I went ahead with the first tutorial:
SDC (the simple calculator), under "C:\GPS\doc\gps\examples\demo" (with the
default Windows installation), defined by the project file "sdc.gpr".

When I reached the full compilation stage of the Tutorial, I got a nasty
failure: gnatmake stops at "matrix_binding.adb", telling me that a series
of binding functions have "undefined reference to" 'name-of-function'.

The functions are in a C file ("matrix_utils.c" and/or "matrix.h")
included in the project. 

But my question is this: As I was trying to figure out how Ada manages
binding with external language modules (in our case with C code), I saw
that it uses the following syntax:

    function Alloc (Rows, Columns : Integer) return Matrix_Type is
        function C_Alloc (Rows, Columns : short) return Matrix_Type;
        pragma Import (C, C_Alloc, "matrixAlloc");
    begin
        return C_Alloc (short (Rows), short (Columns));
    end Alloc;

Now as I gather from another example in this forum, this "Import" function
works like so:

    -- Based on our example
    pragma Import (
        Convention      => C,
        Entity          => C_Alloc,
        External_Name   => "matrixAlloc"
        );

That's fine, but how does the compiler know where the heck "matrixAlloc"
is? I can't see the actual C file where the "matrixAlloc" and similar
functions are located included or explicitly referred to in the
"matrix_binding.ads" file, either. 

I checked:

- the .GPR file - the project directories are listed there, but not the
actual external module names;

- the GPS help system (which has topic headings like
"Interfaces.C.Strings", although they don't lead to any help files - that
link refers to an .ADS file, for instance);

- "Ada Distilled", the Wikibook "Ada Programming", the site "AdaPower",
etc.

I just couldn't find something that actually explains this to me.

Obviously - by Eric Raymondian criteria -, I'm dumb.

Any patient soul out there to explain how the f--- Ada does binding with
an external language module? (Not the "pragma import" construct, dammit,
but how the whole thing comes together.)

Thanks, patient soul!


-- Ken

P.S. Oh, and by the way: Why doesn't the example compile? Is it because I
installed GPS on an XP system when it was a full moon?






^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2006-06-26  6:58 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-06-21 20:43 GPS example fails to compile Xcriber51
2006-06-21 20:56 ` Pascal Obry
2006-06-21 21:16   ` Xcriber51
2006-06-21 21:12 ` Gautier
2006-06-22  5:00 ` Jeffrey R. Carter
2006-06-22 11:29 ` Stephen Leake
2006-06-22 22:41 ` Simon Wright
2006-06-23  8:18   ` Ludovic Brenta
2006-06-23 12:59     ` Alex R. Mosteo
2006-06-23 19:35       ` Xcriber51
2006-06-25 20:41       ` Simon Wright
2006-06-26  6:58         ` Alex R. Mosteo

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