Creating a shared library under Linux?

Jens Mueller jens.k.mueller at gmx.de
Sun Jul 29 05:34:30 PDT 2012


Mike Wey wrote:
> On 07/27/2012 09:33 AM, Alex Rønne Petersen wrote:
> >On 27-07-2012 09:31, Jens Mueller wrote:
> >>Alex Rønne Petersen wrote:
> >>>On 27-07-2012 07:23, Jens Mueller wrote:
> >>>>Hi,
> >>>>
> >>>>I've read several threads that about creating shared libraries. But I
> >>>>could not make it work.
> >>>>Does anybody know how to create a shared library? I don't care which
> >>>>compiler I have to use to accomplish it.
> >>>>
> >>>>Jens
> >>>>
> >>>
> >>>Well, all three compilers (DMD, GDC, LDC) can create shared
> >>>libraries at this point. But DMD doesn't actually ship libphobos2
> >>>(druntime+phobos) as a shared library yet, so this is not going to
> >>>work out so well. If, however, you don't use stock libphobos2, you
> >>>can pass -shared -fPIC to create a shared library.
> >>
> >>But I can build druntime+phobos as shared libraries and then it should
> >>work with dmd?
> >
> >No, exceptions and TLS will still be broken, and the runtime doesn't
> >know how to deal with shared libraries as they are loaded, so the GC
> >might break in funny ways.
> >
> >>
> >>>GDC and LDC, as far as I know, can both create shared libraries. GDC
> >>>does it with the standard options you'd pass to GCC. LDC's command
> >>>line is very similar to DMD's if memory serves.
> >>
> >>I tried both gdc and ldc but failed. I will write more specifically what
> >>I did later.
> >>
> >>>But (another one!): druntime is not yet ready to handle shared
> >>>libraries properly. This means that exceptions thrown across library
> >>>boundaries, TLS, etc are not likely to work properly.
> >>
> >>I think I can avoid all of these limitations.
> >
> >Well, so long as you don't use exceptions and TLS, it might work. But I
> >wouldn't recommend relying on it.
> >
> >>
> >>>So, in short: If you're using stock libphobos2, don't bother. If
> >>>you're not using stock libphobos2, you can probably trivially create
> >>>shared libraries.
> >>
> >>I see. Then I will try to build a shared libphobos2 first.
> >>Many thanks.
> >>
> >>Jens
> >>
> >
> >
> 
> 
> I've successfully build GtkD as a shared library using LDC using the
> following steps:
> 
> Compiling the source files with fPIC:
> ldc -O -m64 -relocation-model=pic -Isrc -c (source file)
> 
> Combine all the GtkD object file into one big object file:
> ld -r (all GtkD object files) -o output.o
> 
> Create the shared lib using LDC:
> ldc -shared output.so -L-soname=(so version) output.o

Thanks a lot.
This does work if the last command is changed to
ldc2 -shared -of=output.so -L-soname=1 output.o
and ldc was built using -DBUILD_SHARED_LIBS=ON.

Jens


More information about the Digitalmars-d mailing list