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