comp.lang.ada
 help / color / mirror / Atom feed
From: "Lucretia" <lucretia9@lycos.co.uk>
Subject: Re: Multiple shared libraries with a single spec
Date: 4 Nov 2005 07:53:02 -0800
Date: 2005-11-04T07:53:02-08:00	[thread overview]
Message-ID: <1131119582.929654.323550@f14g2000cwb.googlegroups.com> (raw)
In-Reply-To: u64r8tsgc.fsf@acm.org

Stephen Leake wrote:

> Excellent idea.

Yup, just makes this sort of stuff easier to develop.

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

See previous post.

> > 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.

No, it doesn't but when you create a C++ class library, the easiest way
to do this is to export a C constructor function, e.g.

extern "C" My_Funky_Class *My_DLL_New(void);
extern "C" void My_DLL_Delete(My_Funky_Class *Ptr);

This is what I don't want as any function that uses the maths routines,
basically everything, will end up being really slow as each vector
object will be a "pointer to" and every reference will have to be
dereferenced. This is bad for speed in 3D apps.

> 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.

This isn't compiler independent as the library generated won't be able
to be used from another Ada compiler, i.e. the name mangling may not be
the same.

But you should be able to do this on Windows, as I have created 2 types
of C++ class DLL in the past, 1 which uses the C constructor mechanism
described above (i.e. the COM interface type) and another where the C++
class can be linked to directly without using the interface mechanism.

> > 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.

Hmmm, haven't used project files yet.

I ask about this, because I'm generating 2 libs, each have slightly
different ALI's and I was wondering whether this way would cause
problems in the future?

Thanks,
Luke.




  reply	other threads:[~2005-11-04 15:53 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
2005-11-04 15:53   ` Lucretia [this message]
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