Using D libs in C

Jacob Carlborg doob at me.com
Tue Feb 8 00:59:58 PST 2011


On 2011-02-07 20:07, Steven Schveighoffer wrote:
> On Mon, 07 Feb 2011 13:53:14 -0500, spir <denis.spir at gmail.com> wrote:
>
>> On 02/07/2011 04:32 PM, Steven Schveighoffer wrote:
>>> On Mon, 07 Feb 2011 06:42:46 -0500, spir <denis.spir at gmail.com> wrote:
>>>
>>>> On 02/07/2011 07:53 AM, GreatEmerald wrote:
>>>>> Hmm, no, it won't work right on Linux for some reason. This is the
>>>>> output:
>>>>>
>>>>> /usr/lib/gcc/x86_64-linux-gnu/4.3.2/../../../libphobos2.a(deh2_4e7_525.o):
>>>>> In
>>>>> function `_D2rt4deh213__eh_finddataFPvZPS2rt4deh213DHandlerTable':
>>>>> src/rt/deh2.d:(.text._D2rt4deh213__eh_finddataFPvZPS2rt4deh213DHandlerTable+0x4):
>>>>>
>>>>>
>>>>> undefined reference to `_deh_beg'
>>>>> src/rt/deh2.d:(.text._D2rt4deh213__eh_finddataFPvZPS2rt4deh213DHandlerTable+0xc):
>>>>>
>>>>>
>>>>> undefined reference to `_deh_beg'
>>>>> src/rt/deh2.d:(.text._D2rt4deh213__eh_finddataFPvZPS2rt4deh213DHandlerTable+0x13):
>>>>>
>>>>>
>>>>> undefined reference to `_deh_end'
>>>>> src/rt/deh2.d:(.text._D2rt4deh213__eh_finddataFPvZPS2rt4deh213DHandlerTable+0x37):
>>>>>
>>>>>
>>>>> undefined reference to `_deh_end'
>>>>> collect2: ld returned 1 exit status
>>>>> --- errorlevel 1
>>>>>
>>>>> The shell script I'm using to compile it is:
>>>>>
>>>>> #!/bin/sh
>>>>> dmd -m32 -c -lib dpart.d
>>>>> gcc -m32 -c cpart.c
>>>>> dmd -m32 cpart.o dpart.a /usr/lib/libphobos2.a
>>>>>
>>>>> (Although it appears that you don't need to explicitly link with
>>>>> libphobos2, it
>>>>> does it automatically... and fails with the above error.) Any ideas
>>>>> about
>>>>> what the
>>>>> error means?
>>>>
>>>> Take my words with much doubt, I've few exp in that.
>>>> Are you sure you did use same source under both OSes?
>>>> "undefined reference to `_deh_end' / `_deh_beg'"
>>>
>>> deh == d exception handling (or handler, not sure) ;)
>>>
>>> Looks like the module that's failing to link is rt.deh
>>
>> Are you sure of that? I get exactly the same kind of linker error when
>> forgetting a fake main(){} (whatver the number of modules). Eg:
>> ...
>> src/rt/deh2.d:(.text._D2rt4deh213__eh_finddataFPvZPS2rt4deh213DHandlerTable+0xc):
>> undefined reference to `_deh_beg'
>> src/rt/deh2.d:(.text._D2rt4deh213__eh_finddataFPvZPS2rt4deh213DHandlerTable+0x13):
>> undefined reference to `_deh_end'
>> ...
>> repeted n times.
>
> Hm... it looks like _deh_beg and _deh_end is something defined by the
> compiler? It's used in deh2.d but not defined anywhere in druntime.
>
> I'm pretty sure deh stands for d exception handler.
>
> -Steve

The compiler puts this in the binary.

-- 
/Jacob Carlborg


More information about the Digitalmars-d-learn mailing list