comp.lang.ada
 help / color / mirror / Atom feed
From: Ludovic Brenta <ludovic@ludovic-brenta.org>
Subject: Re: Debian Sarge: problem with libgnat.so
Date: Sat, 24 Dec 2005 01:23:06 +0100
Date: 2005-12-24T01:23:06+01:00	[thread overview]
Message-ID: <87u0czny1h.fsf@ludovic-brenta.org> (raw)
In-Reply-To: 96eu73-n92.ln1@martinkl.dialup.fu-berlin.de

Martin Klaiber <martinkl@zedat.fu-berlin.de> writes:
[...]
>   GNAT_LIB = /usr/lib/gcc-lib/i486-linux/2.8.1/adalib/libgnat.so
[...]
>   .PHONY: shared
>   shared: default
>           gnatgcc -shared -L$(GNAT_LIB) -lgnat -Wl,-soname,$(SHARED_API) -o $(SHARED_VERSION) *.o
>
> But this only moves the problem one step forward :-/
>
>   gnatmake libopensteuer -c -fPIC -m -O3 -largs
>   gnatmake: objects up to date.
>   gnatgcc -shared -L/usr/lib/gcc-lib/i486-linux/2.8.1/adalib/libgnat.so -lgnat -Wl,-soname,libopensteuer.so.0 -o libopensteuer.so.0.2004.3 *.o
>   ld: cannot find -lgnat
>
> Is my system broken?  Do you have an idea, why gnatgcc doesn't find
> libgnat?

Because your -L does not specify a directory name but a file name
instead.  No, your system isn't broken :)

> On the other hand, I don't want to use gnatgcc really, because there
> are systems out without gnatgcc (SuSE IIRC).  So, I think, I will
> use the other option: ask the user if I should create
> /usr/lib/libgnat.so if it is missing.

If you hide libgnat from C programmers, you can use gnatgcc, adagcc
(FreeBSD) or gcc or ld or whatever, and they don't have to know or
care.  They'll use just "gcc" and get libgnat pulled in by your
library.

If you make your library into a package, it will have to Build-Depend
on gnat, and Depend on libgnat-3.15p-1.

[...] About GNAE:

> Indeed.  But the paper doesn't mention a situation as we might have
> in my case: somebody installs the libraries needed for this program
> (for instance by a package-manager which only does the default
> installation, i.e. no extra creation of links).
> 
> But this person does not install the Ada-compiler, as he only wants
> to build a C-program using my library.  So he would only have $(CC),
> and as you said, C-compilers would look in /usr/lib vor libgnat.so,
> not in /usr/lib/gcc-lib/...
>
> Doesn't this mean that we always should have /usr/lib/libgnat.so?
> 
> Or, to ask the other way round: is there a special reason why we
> don't have this link in /usr/lib?

The GNAE specifies that libgnat.so must be in the GNAT-specific
directory under /usr/lib/gcc-lib/.../adalib.

In Debian, most libraries intended for use from C programs come in two
packages.  Assuming a library L with soname libL.so.0, you'd have:

package libL0:
   /usr/lib/libL.so.0.1.2
   /usr/lib/libL.so.0 -> libL.so.0.1.2

package libL-dev:
   /usr/lib/libL.so -> libL.so.0.1.2

In C programs, if you specify "-lL" on your linker's command line, you
need the libL-dev package.  Your users only need the libL0 package.

Now, libgnat is not intended for use from C programs, and there is no
libgnat-dev package; instead the package gnat provides the .so link as
well as the compiler and assorted tools.  So therefore, as things
stand now, anyone who wants to specify "-lgnat" must install gnat, and
also specify -L/usr/lib/gcc-lib/.../adalib.

In the next gnat, I will provide /usr/lib/libgnat.so for the specific
purpose of making it easier to link shared libraries with libgnat.
But don't hold your breath for that next release; in any case it will
not be in Sarge but only in Etch.

-- 
Ludovic Brenta.



  reply	other threads:[~2005-12-24  0:23 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-12-22 21:12 Debian Sarge: problem with libgnat.so Martin Klaiber
2005-12-22 23:35 ` Ludovic Brenta
2005-12-23  0:15   ` Martin Klaiber
2005-12-23 12:43     ` Ludovic Brenta
2005-12-23 16:10       ` Georg Bauhaus
2005-12-23 23:35       ` Martin Klaiber
2005-12-24  0:23         ` Ludovic Brenta [this message]
2005-12-27 12:23           ` Martin Klaiber
2005-12-27 15:43             ` Ludovic Brenta
replies disabled

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