comp.lang.ada
 help / color / mirror / Atom feed
From: Stephen Leake <stephen_leake@acm.org>
Subject: Re: Multiple shared libraries with a single spec
Date: Fri, 04 Nov 2005 09:09:55 -0500
Date: 2005-11-04T09:09:55-05:00	[thread overview]
Message-ID: <u64r8tsgc.fsf@acm.org> (raw)
In-Reply-To: 1131107328.981560.222350@g43g2000cwa.googlegroups.com

"Lucretia" <lucretia9@lycos.co.uk> writes:

> One of the things I need to know how to achieve is having a single
> specification but different bodies, to create a set of similar shared
> libraries. 

Excellent idea.

> So I may have a directory structure like this:
>
> vector.ads
> i386/vector.adb
> i386/libvector.so
> sse/vector.adb
> sse/libvector.so
> mmx/vector.adb
> mmx/libvector.so

Locating the object files with the source files is in general a bad
idea, but not relevant to this discussion.

> Now, I could export a bunch of C functions and use dlopen/dlsym, etc.
> but this isn't the best way and it doesn't allow you to use your Ada
> libs the way you want to. Also it would make the types slow to use if
> they had to go through C constructors and interfaces (like you would a
> C++ shared library).

C doesn't have 'constructors', so I don't know what you mean here.

If you want the main program to choose which library implementation to
use at run time, then dynamic library linking is the only option. This
would make sense for a program that could take advantage of different
flavors of x86, as you describe above.

> I have just created a test program which creates 2 shared libs (in
> separate directories with separate makefiles) and then created adalib
> and adainclude directories in which the lib, ali and ads files were
> linked to. I then built the test app which linked to the files in
> adalib and adainclude. I could then use a symlink to change the library
> used. This works, but I'm not too sure if it's the correct way to do
> this.

It's one valid way, and has the advantage of being compiler
independent. But it isn't operating system independent; you can't do
this on Windows.

> Has anyone else done this sort of thing with GNAT?

I use GNAT project files for this; one project file per target. The
Source_Dirs value specifies what Ada bodies to use, by specifying the
directory search path. All objects are placed in one build directory;
one build directory per target.

-- 
-- Stephe



  parent reply	other threads:[~2005-11-04 14:09 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-04 12:28 Multiple shared libraries with a single spec Lucretia
2005-11-04 12:56 ` Niklas Holsti
2005-11-04 13:03   ` Lucretia
2005-11-04 13:22     ` Niklas Holsti
2005-11-04 15:43       ` Lucretia
2005-11-04 16:31         ` Pascal Obry
2005-11-04 17:36         ` Martin Krischik
2005-11-04 17:31       ` Martin Krischik
2005-11-04 21:55         ` Niklas Holsti
2005-11-04 13:04   ` Lucretia
2005-11-04 14:09 ` Stephen Leake [this message]
2005-11-04 15:53   ` Lucretia
2005-11-04 17:34     ` Martin Krischik
2005-11-05 10:41     ` Stephen Leake
2005-11-05 11:44       ` Lucretia
2005-11-05 14:17         ` Martin Krischik
2005-11-05 15:47           ` Stephen Leake
2005-11-05 16:00             ` Stefan Bellon
2005-11-06 11:57               ` Stephen Leake
2005-11-06 12:33                 ` Stefan Bellon
2005-11-07 17:30             ` Lucretia
2005-11-07 23:42               ` Stephen Leake
2005-11-08  6:31               ` Stefan Bellon
2005-11-05 14:12       ` Martin Krischik
2005-11-05 14:22         ` Pascal Obry
2005-11-07 14:12           ` Frank J. Lhota
2005-11-07 17:31             ` Pascal Obry
replies disabled

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