gcc linkage problem with C & D
Frits van Bommel
fvbommel at REMwOVExCAPSs.nl
Fri Jul 27 00:06:28 PDT 2007
Charles D Hixson wrote:
> /usr/local/dmd/lib/libphobos.a(dmain2.o): In function `main':
> internal/dmain2.d:(.gnu.linkonce.tmain+0x74): undefined reference to
> `_Dmain'
> internal/dmain2.d:(.gnu.linkonce.tmain+0xc5): undefined reference to
> `_Dmain'
> /usr/local/dmd/lib/libphobos.a(deh2.o): In function
> `_D4deh213__eh_finddataFPvZPS4deh213DHandlerTable':
> internal/deh2.d:(.gnu.linkonce.t_D4deh213__eh_finddataFPvZPS4deh213DHandlerTable+0x9):
> undefined reference to `_deh_beg'
> internal/deh2.d:(.gnu.linkonce.t_D4deh213__eh_finddataFPvZPS4deh213DHandlerTable+0xe):
> undefined reference to `_deh_beg'
> internal/deh2.d:(.gnu.linkonce.t_D4deh213__eh_finddataFPvZPS4deh213DHandlerTable+0x14):
> undefined reference to `_deh_end'
> internal/deh2.d:(.gnu.linkonce.t_D4deh213__eh_finddataFPvZPS4deh213DHandlerTable+0x37):
> undefined reference to `_deh_end'
> collect2: ld returned 1 exit status
> make: *** [test0] Error 1
>
[snip makefile]
>
> (minus some wrapping that happened in posting). The other files are
> unchanged: test0c.c is a "hello, world" function, and test0d.d is a
> main routine that just calls the function.
I just had another look at your test0d.d file, and found your problem.
Your file is this:
-----
extern(C):
int test();
void main()
{ test; }
-----
That little ':' at the end of the first line means it'll apply extern(C)
to _everything that follows_, not just test(). So your main() is also
extern(C), which changes the name in the object file and doesn't invoke
DMDs special handling of the D main function (which emits _deh_* to help
exception handling support locate exception handler data).
So to fix your program, just delete the ':'. It compiled and ran fine on
my machine after that modification (besides some minor issues you
probably won't have; using a 32-bit gcc on my 64-bit machine and
correcting the dmd dir in the makefile for my machine).
More information about the Digitalmars-d-learn
mailing list