Undefined Reference calling D from C using static linking
Nicholas Wilson via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Mar 23 04:32:25 PDT 2017
On Thursday, 23 March 2017 at 10:49:37 UTC, data pulverizer wrote:
> On Thursday, 23 March 2017 at 10:16:22 UTC, Nicholas Wilson
> wrote:
>>
>> It has to do with module references to druntime stuff. You can
>> either try adding a
>>
>> pragma(LDC_no_module_info); //I think it is spelled correctly.
>>
>> or you can use ldc to link and it will link druntime
>>
>> gcc ccode.c -c
>> ldc2 dcode.d code.o
>>
>> I don't know how well that will work.
>
> Many thanks, I tried:
>
> ```
> pragma(LDC_no_moduleinfo) //
> https://wiki.dlang.org/LDC-specific_language_changes#LDC_no_moduleinfo
> ```
>
> which worked, your method of doing the final compilation using
> ldc2 (or dmd) also works :-)
>
> Is there a dmd equivalent for `pragma(LDC_no_module_info);`?
> Attempting the final compilation `gcc -o output ccode.o
> dcode.o` after the second stage compilation `dmd -c dcode.d`
> gives an error:
>
> ```
> dcode.o: In function `_D5dcode7__arrayZ':
> dcode.d:(.text._D5dcode7__arrayZ+0x23): undefined reference to
> `_d_arraybounds'
> dcode.o: In function `_D5dcode8__assertFiZv':
> dcode.d:(.text._D5dcode8__assertFiZv+0x23): undefined reference
> to `_d_assert'
> dcode.o: In function `_D5dcode15__unittest_failFiZv':
> dcode.d:(.text._D5dcode15__unittest_failFiZv+0x23): undefined
> reference to `_d_unittest'
> dcode.o:(.text.d_dso_init[.data.d_dso_rec]+0x22): undefined
> reference to `_d_dso_registry'
> collect2: error: ld returned 1 exit status
> ```
>
> ```
> dmd --version
> DMD64 D Compiler v2.073.2
> Copyright (c) 1999-2016 by Digital Mars written by Walter Bright
> ```
Those functions are the bounds checking function, the non
unittest assert function, the unittest function an module
initialisation function respectively. dmd -boundscheck=off
-release should get rid of the first two, you didn't compile with
-unittest so I'm not sure why the thord one is there at all. For
_d_dso_registry all i can suggest is see what -betterC gets you.
More information about the Digitalmars-d-learn
mailing list