tooling quality and some random rant
Steven Schveighoffer
schveiguy at yahoo.com
Mon Feb 14 09:54:20 PST 2011
On Sun, 13 Feb 2011 14:12:02 -0500, Walter Bright
<newshound2 at digitalmars.com> wrote:
> Vladimir Panteleev wrote:
>> On Sun, 13 Feb 2011 20:26:50 +0200, Walter Bright
>> <newshound2 at digitalmars.com> wrote:
>>
>>> golgeliyele wrote:
>>>> I don't think C++ and gcc set a good bar here.
>>>
>>> Short of writing our own linker, we're a bit stuck with what ld does.
>> That's not true. The compiler has knowledge of what symbols will be
>> passed to the linker, and can display its own, much nicer error
>> messages. I've mentioned this in our previous discussion on this topic.
>
> Not without reading the .o files passed to the linker, and the
> libraries, and figuring out what would be pulled in from those
> libraries. In essence, the compiler would have to become a linker.
>
> It's not impossible, but is a tremendous amount of work in order to
> improve one error message, and one error message that generations of C
> and C++ programmers are comfortable dealing with.
I'm not saying that this should be done and is worth the tremendous effort.
However, when linking a c++ app without a main, here is what I get:
/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../lib/crt1.o: In function
`_start':
(.text+0x18): undefined reference to `main'
When linking a d app without a main, we get:
/home/steves/dmd-2.051/linux/bin/../lib/libphobos2.a(dmain2_517_1a5.o): In
function `_D2rt6dmain24mainUiPPaZi7runMainMFZv':
src/rt/dmain2.d:(.text._D2rt6dmain24mainUiPPaZi7runMainMFZv+0x16):
undefined reference to `_Dmain'
/home/steves/dmd-2.051/linux/bin/../lib/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'
/home/steves/dmd-2.051/linux/bin/../lib/libphobos2.a(thread_eb_258.o): In
function `_D4core6thread6Thread6__ctorMFZC4core6thread6Thread':
src/core/thread.d:(.text._D4core6thread6Thread6__ctorMFZC4core6thread6Thread+0x1d):
undefined reference to `_tlsend'
src/core/thread.d:(.text._D4core6thread6Thread6__ctorMFZC4core6thread6Thread+0x24):
undefined reference to `_tlsstart'
/home/steves/dmd-2.051/linux/bin/../lib/libphobos2.a(thread_ee_6e4.o): In
function `thread_attachThis':
src/core/thread.d:(.text.thread_attachThis+0x53): undefined reference to
`_tlsstart'
src/core/thread.d:(.text.thread_attachThis+0x5c): undefined reference to
`_tlsend'
/home/steves/dmd-2.051/linux/bin/../lib/libphobos2.a(thread_e8_713.o): In
function `thread_entryPoint':
src/core/thread.d:(.text.thread_entryPoint+0x29): undefined reference to
`_tlsend'
src/core/thread.d:(.text.thread_entryPoint+0x2f): undefined reference to
`_tlsstart'
collect2: ld returned 1 exit status
--- errorlevel 1
Let's not pretend that generations of c/C++ coders are going to attribute
this slew of errors to a missing main function. The first time I see
this, I'm going to think I missed something else.
I understand that to fix this, we need the linker to be more helpful, or
we need to make dmd more helpful. I don't know how much effort it is, or
how much it's worth it, I just wanted to point out that your statement
about equivalence to C++ is stretching it.
I personally think we need to get the linker to demangle symbols better.
That would go a long way...
-Steve
More information about the Digitalmars-d
mailing list