comp.lang.ada
 help / color / mirror / Atom feed
* Help Linking Shared Objects for Library Use
@ 2018-04-28 19:07 patrick
  2018-04-28 20:32 ` Simon Wright
  0 siblings, 1 reply; 3+ messages in thread
From: patrick @ 2018-04-28 19:07 UTC (permalink / raw)



Hi Everyone

I am trying a new approach(for me) in terms of mixing C and Ada. I want to compile C object code and install system wide in my /usr/local/

I have this program:

with cow ;

procedure barn is
x : integer ;
begin
x := cow.moo ;
end barn ;


It "withs" this program:

package cow is

function  moo  return integer;
pragma import (C, moo, "moo") ;

end cow ;

This Ada library code should call this C code:

#include "sounds.h"
#include <stdio.h>

int moo(){
 printf("cow says moooo\n") ;
return 0;
}


Which also has a header:

int moo(void) ;


I have a little build.sh script which is run to build the shared object from the C code:

gcc -c -Wall -Werror -fpic sounds.c
sudo cp sounds.h /usr/local/include
sudo gcc -shared sounds.o  -o /usr/local/lib/libsounds.so

If I run at the command line, I get this error:

gnatmake barn.adb -lsounds
gcc-4.6 -c -lsounds barn.adb
gcc-4.6 -c -lsounds cow.ads
gnatbind -x barn.ali
gnatlink barn.ali
./barn.o: In function `_ada_barn':
barn.adb:(.text+0x9): undefined reference to `moo'
collect2: ld returned 1 exit status
gnatlink: error when calling /usr/bin/gcc-4.6
gnatmake: *** link failed.
 

When I look at the Ada library code installed from my repo it has .ali files but I don't think I am generating cow.ali

Is there a step I am missing to build cow.ads properly? or am I doing something else wrong?

Thanks for reading-Patrick



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

* Re: Help Linking Shared Objects for Library Use
  2018-04-28 19:07 Help Linking Shared Objects for Library Use patrick
@ 2018-04-28 20:32 ` Simon Wright
  2018-04-28 21:01   ` patrick
  0 siblings, 1 reply; 3+ messages in thread
From: Simon Wright @ 2018-04-28 20:32 UTC (permalink / raw)


patrick@spellingbeewinnars.org writes:

> gnatmake barn.adb -lsounds
> gcc-4.6 -c -lsounds barn.adb
> gcc-4.6 -c -lsounds cow.ads
> gnatbind -x barn.ali
> gnatlink barn.ali
> ./barn.o: In function `_ada_barn':
> barn.adb:(.text+0x9): undefined reference to `moo'
> collect2: ld returned 1 exit status
> gnatlink: error when calling /usr/bin/gcc-4.6
> gnatmake: *** link failed.
>  
> When I look at the Ada library code installed from my repo it has .ali
> files but I don't think I am generating cow.ali

Well, are you or aren't you? is it there or not?

> Is there a step I am missing to build cow.ads properly? or am I doing
> something else wrong?

You might have thought that gnatmake would report that it's going to
ignore that '-lsounds' at the link phase, after uselessly passing it
through to the compile phase. Interestingly, it does recognise that -L
only needs to be passed through to the link phase.

The answer is to say

   $ gnatmake barn.adb -largs -lsounds

> Thanks for reading-Patrick

I very nearly didn't, because of the careless formatting of the code.

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

* Re: Help Linking Shared Objects for Library Use
  2018-04-28 20:32 ` Simon Wright
@ 2018-04-28 21:01   ` patrick
  0 siblings, 0 replies; 3+ messages in thread
From: patrick @ 2018-04-28 21:01 UTC (permalink / raw)


Problem solved, thanks Simon

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

end of thread, other threads:[~2018-04-28 21:01 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-28 19:07 Help Linking Shared Objects for Library Use patrick
2018-04-28 20:32 ` Simon Wright
2018-04-28 21:01   ` patrick

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