Re: Debian Sarge: problem with libgnat.so



Martin Klaiber <martinkl@xxxxxxxxxxxxxxxxxx> 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.
.



Relevant Pages

  • Re: A real package manager in action
    ... I believe package management is about permitting multiple versions of ... libraries should not change their APIs so correctly written programs will ... systems on linux platforms, the multi-version problem can lead to a need to ... merely to install them. ...
    (comp.sys.acorn.apps)
  • Re: amd64 questions
    ... so if you want to install a 64 bit package ... install of a 32-bit pkg with its dependencies. ... them (ie libraries in /usr/lib32). ... have a broken copy of the tarball the port is using. ...
    (freebsd-hackers)
  • Re: freedom of debian
    ... While Debian does have a great package management system. ... do is install the stable version of some package on Debian Stable, ... software is packaged linked to the newer libraries. ...
    (Debian-User)
  • Re: where glib-2.4.4 is installed..?
    ... to glibc 2.1 so that I can compile and install it on my box. ... The runtime package will consist mostly of a few shared ... libraries in /usr/lib. ... This will indeed find shared libraries, which he may or may not be ...
    (comp.os.linux.setup)
  • Re: XDMCP on Solaris 9
    ... > Platform minimum required Fonts Package ... > Text Layout support ... > libraries ...
    (comp.unix.solaris)