Creating a shared library under Linux?

Mike Wey mike-wey at example.com
Fri Jul 27 09:58:14 PDT 2012


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

-- 
Mike Wey




More information about the Digitalmars-d mailing list