Using D libs in C

Daniel Green venix1 at gmail.com
Wed Mar 23 15:17:17 PDT 2011


On 3/23/2011 3:22 AM, Dainius (GreatEmerald) wrote:
> Though I find it quite odd that I need workarounds like those to
> compile on Linux, but ah well, it works, at least. Also odd that I
> can't link using GCC on Linux, it gives me a long list of undefined
> references (it seems that they are all coming from phobos2, it's here
> if you wish to look through it: http://pastebin.com/cfyMDzDn ). But
> once again, at least it works now, so thanks a lot!

The weird linking with Linux appears to be caused by DMD requiring 
symbols for thread local storage.  When you declare main, DMD will 
output those symbols.  I don't know of any other way to get those symbols.

int function() _main = &main; // Makes DMD output the _tls symbols.

Your issue when linking with GCC looks like your missing the pthread 
library or development files.

gcc cpart.o -o cpart -m32 -Xlinker -L/home/venix/dmd2/linux/bin/../lib32 
-Xlinker -L/home/venix/dmd2/linux/bin/../lib64 -Xlinker 
--no-warn-search-mismatch -Xlinker --export-dynamic -lrt dpart.a 
-lphobos2 **-lpthread** -lm


Something a little more cosmetic, would be to have the D library call 
rt_init and rt_term.  That could be automatic with a shared library. 
With a static library having Library_Init and Library_Quit do it would work.


More information about the Digitalmars-d-learn mailing list