Link errors using ldc built from trunk

22 views
Skip to first unread message

Mike Farnsworth

unread,
Nov 10, 2009, 12:20:45 AM11/10/09
to LDC - the LLVM D compiler
I was trying to build ldc from trunk (with Tango 0.99.8), and with
just a tiny bit of massaging I was able to get everything to build.
However, when I compile a simple D program, I end up with a boatload
of link errors. This is on Fedora 11, x86-64.

/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):
In function `_D8lifetime13length_adjustFmmZm':
/home/mike/Development/ldc/runtime/internal/lifetime.d:100: undefined
reference to `onOutOfMemoryError'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):
In function `_d_allocclass':
/home/mike/Development/ldc/runtime/internal/lifetime.d:129: undefined
reference to `gc_malloc'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):
In function `_d_delclass':
/home/mike/Development/ldc/runtime/internal/lifetime.d:203: undefined
reference to `gc_free'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):
In function `_d_newarrayT':
/home/mike/Development/ldc/runtime/internal/lifetime.d:237: undefined
reference to `gc_malloc'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):
In function `_d_newarrayiT':
/home/mike/Development/ldc/runtime/internal/lifetime.d:259: undefined
reference to `gc_malloc'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):
In function `_d_newarrayvT':
/home/mike/Development/ldc/runtime/internal/lifetime.d:304: undefined
reference to `gc_malloc'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):
In function `_d_allocmemoryT':
/home/mike/Development/ldc/runtime/internal/lifetime.d:476: undefined
reference to `gc_malloc'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):
In function `_d_delarray':
/home/mike/Development/ldc/runtime/internal/lifetime.d:491: undefined
reference to `gc_free'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):
In function `_d_delmemory':
/home/mike/Development/ldc/runtime/internal/lifetime.d:504: undefined
reference to `gc_free'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):
In function `rt_finalize':
/home/mike/Development/ldc/runtime/internal/lifetime.d:576: undefined
reference to `onFinalizeError'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):
In function `_d_arraysetlengthT':
/home/mike/Development/ldc/runtime/internal/lifetime.d:620: undefined
reference to `gc_query'
/home/mike/Development/ldc/runtime/internal/lifetime.d:626: undefined
reference to `gc_extend'
/home/mike/Development/ldc/runtime/internal/lifetime.d:632: undefined
reference to `gc_malloc'
/home/mike/Development/ldc/runtime/internal/lifetime.d:641: undefined
reference to `gc_calloc'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):
In function `_d_arraysetlengthiT':
/home/mike/Development/ldc/runtime/internal/lifetime.d:699: undefined
reference to `gc_query'
/home/mike/Development/ldc/runtime/internal/lifetime.d:705: undefined
reference to `gc_extend'
/home/mike/Development/ldc/runtime/internal/lifetime.d:711: undefined
reference to `gc_malloc'
/home/mike/Development/ldc/runtime/internal/lifetime.d:719: undefined
reference to `gc_malloc'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):
In function `_adDupT':
/home/mike/Development/ldc/runtime/internal/lifetime.d:1064: undefined
reference to `gc_malloc'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):
In function
`_D8lifetime13_d_newarraymTUC8TypeInfoiPmZPv3fooFC8TypeInfoPmiZAv':
/home/mike/Development/ldc/runtime/internal/lifetime.d:338: undefined
reference to `gc_malloc'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):
In function
`_D8lifetime14_d_newarraymiTUC8TypeInfoiPmZPv3fooFC8TypeInfoPmiZAv':
/home/mike/Development/ldc/runtime/internal/lifetime.d:387: undefined
reference to `gc_malloc'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):/
home/mike/Development/ldc/runtime/internal/lifetime.d:436: more
undefined references to `gc_malloc' follow
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(genobj.o):
In function `rt_attachDisposeEvent':
/home/mike/Development/ldc/runtime/internal/genobj.d:1439: undefined
reference to `onOutOfMemoryError'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(adi.o): In
function `_adReverse':
/home/mike/Development/ldc/runtime/internal/adi.d:284: undefined
reference to `gc_malloc'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(aaA.o): In
function `_aaGet':
/home/mike/Development/ldc/runtime/internal/aaA.d:275: undefined
reference to `gc_calloc'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(aaA.o): In
function `_aaDel':
/home/mike/Development/ldc/runtime/internal/aaA.d:392: undefined
reference to `gc_free'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(aaA.o): In
function `_aaValues':
/home/mike/Development/ldc/runtime/internal/aaA.d:443: undefined
reference to `gc_malloc'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(aaA.o): In
function `_aaKeys':
/home/mike/Development/ldc/runtime/internal/aaA.d:583: undefined
reference to `gc_malloc'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(dmain2.o):
In function `_d_assert':
/home/mike/Development/ldc/runtime/internal/dmain2.d:62: undefined
reference to `onAssertError'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(dmain2.o):
In function `_d_assert_msg':
/home/mike/Development/ldc/runtime/internal/dmain2.d:67: undefined
reference to `onAssertErrorMsg'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(dmain2.o):
In function `_d_array_bounds':
/home/mike/Development/ldc/runtime/internal/dmain2.d:72: undefined
reference to `onArrayBoundsError'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(dmain2.o):
In function `_d_switch_error':
/home/mike/Development/ldc/runtime/internal/dmain2.d:77: undefined
reference to `onSwitchError'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(dmain2.o):
In function `rt_init':
/home/mike/Development/ldc/runtime/internal/dmain2.d:106: undefined
reference to `gc_init'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(dmain2.o):
In function `rt_term':
/home/mike/Development/ldc/runtime/internal/dmain2.d:133: undefined
reference to `thread_joinAll'
/home/mike/Development/ldc/runtime/internal/dmain2.d:138: undefined
reference to `gc_term'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(dmain2.o):
In function `_D6dmain24mainUiPPaPPaZi6runAllMFZv':
/home/mike/Development/ldc/runtime/internal/dmain2.d:267: undefined
reference to `gc_init'
/home/mike/Development/ldc/runtime/internal/dmain2.d:269: undefined
reference to `runModuleUnitTests'
/home/mike/Development/ldc/runtime/internal/dmain2.d:271: undefined
reference to `thread_joinAll'
/home/mike/Development/ldc/runtime/internal/dmain2.d:274: undefined
reference to `gc_term'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(utf.o): In
function `_D4util3utf10toUCSindexFAamZm':
/home/mike/Development/ldc/runtime/internal/util/utf.d:119: undefined
reference to `onUnicodeError'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(utf.o): In
function `_D4util3utf10toUCSindexFAumZm':
/home/mike/Development/ldc/runtime/internal/util/utf.d:138: undefined
reference to `onUnicodeError'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(utf.o): In
function `_D4util3utf10toUTFindexFAamZm':
/home/mike/Development/ldc/runtime/internal/util/utf.d:160: undefined
reference to `onUnicodeError'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(utf.o): In
function `_D4util3utf6decodeFAaKmZw':
/home/mike/Development/ldc/runtime/internal/util/utf.d:268: undefined
reference to `onUnicodeError'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(utf.o): In
function `_D4util3utf6decodeFAuKmZw':
/home/mike/Development/ldc/runtime/internal/util/utf.d:378: undefined
reference to `onUnicodeError'
/home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(utf.o):/home/
mike/Development/ldc/runtime/internal/util/utf.d:400: more undefined
references to `onUnicodeError' follow
/home/mike/Development/ldc/bin/../lib/libtango-user-ldc.a
(tango.io.device.Device.o): In function
`_D5tango2io6device6Device6Device5errorMFZv':
tango.io.device.Device:(.text+0x141): undefined reference to
`getErrno'
/home/mike/Development/ldc/bin/../lib/libtango-user-ldc.a
(tango.io.device.Conduit.o): In function
`_D5tango2io6device7Conduit7Conduit5errorMFAaZv':
tango.io.device.Conduit:(.text+0x10c): undefined reference to
`_D5tango4core9Exception11IOException7__ClassZ'
tango.io.device.Conduit:(.text+0x11b): undefined reference to
`_D5tango4core9Exception11IOException6__vtblZ'
tango.io.device.Conduit:(.text+0x12a): undefined reference to
`_D5tango4core9Exception11IOException6__initZ'
tango.io.device.Conduit:(.text+0x135): undefined reference to
`_D5tango4core9Exception11IOException6__initZ'
tango.io.device.Conduit:(.text+0x140): undefined reference to
`_D5tango4core9Exception11IOException6__initZ'
tango.io.device.Conduit:(.text+0x14b): undefined reference to
`_D5tango4core9Exception11IOException6__initZ'
tango.io.device.Conduit:(.text+0x156): undefined reference to
`_D5tango4core9Exception11IOException6__initZ'
/home/mike/Development/ldc/bin/../lib/libtango-user-ldc.a
(tango.io.device.Conduit.o):tango.io.device.Conduit:(.text+0x161):
more undefined references to
`_D5tango4core9Exception11IOException6__initZ' follow
collect2: ld returned 1 exit status
Error: linking failed:
status: 1


When I compile with the binary release of ldc it works fine. I've got
what appears to be a properly-built libtango-user-ldc.a in the right
place, and I adjusted my ldc.conf file as much as I could to try to
get it to see everything:

default:
{
// 'switches' holds array of string that are appends to the
command line
// arguments before they are parsed.
switches = [
"-I/home/mike/Development/ldc/../tango",
"-I/home/mike/Development/ldc/../tango/lib/common",
"-L-L%%ldcbinarypath%%/../lib",
"-d-version=Tango",
"-defaultlib=tango-base-ldc",
"-debuglib=tango-base-ldc",
"-L-ltango-base-ldc",
"-L-ltango-user-ldc"
];
};

I'm invoking ldc with the following arguments:

-O5 -enable-inlining -release RenderSpud/Math/Vector.d RenderSpud/
Main.d -of=dRenderSpud

I followed the steps as closely as possible at
http://www.dsource.org/projects/ldc/wiki/BuildInstructions and
http://www.dsource.org/projects/ldc/wiki/BuildInstructionsTango0.99.8
so I'm not sure what I busted along the way.

Any hints?

-Mike

Christian Kamm

unread,
Nov 11, 2009, 1:18:30 PM11/11/09
to ldc...@googlegroups.com
On Tuesday 10 November 2009 06:20 Mike Farnsworth wrote:
> /home/mike/Development/ldc/bin/../lib/libtango-base-ldc.a(lifetime.o):
> In function `_d_allocclass':
> /home/mike/Development/ldc/runtime/internal/lifetime.d:129: undefined
> reference to `gc_malloc'

That is odd. My libtango-ldc-base.a contains this symbol (and probably all the
others too). Can you verify that yours doesn't? Something must have gone wrong
while building the core runtime when you did 'make runtime'.

That's all I can see just now,
Christian

signature.asc

Mike Farnsworth

unread,
Nov 11, 2009, 1:25:34 PM11/11/09
to LDC - the LLVM D compiler
I'll go do an objdump on it and see if I can find all the symbols. I
even went back in and rebuilt libtango-base-ldc.a to make sure it
wasn't a fluke, but no dice. I'll make sure I don't somehow have an
extraneous older lib version sitting around either in my lib path, but
I highly doubt that is the case anyway.

-Mike
>  signature.asc
> < 1KViewDownload

Mike Farnsworth

unread,
Nov 11, 2009, 7:03:00 PM11/11/09
to LDC - the LLVM D compiler
I figured it out. I had checked out tango (0.99.8) in a directory on
the same level as ldc, instead of inside ldc. When I ran "make
runtime" it ran, but silently said nothing about not having the gc
files/etc. it needed from tango. That tango-base-ldc lib of course
had only some of what was necessary.

After looking at the build scripts for a while, I realized they
expected some sort of tango directory *inside* the ldc root
directory. I symlinked the tango directory in, re-ran "make runtime"
and it got rid of those link errors when linking my program. However,
there were different ones, and despite the fact that my ldc.conf had
the user library in it, it didn't link it in automatically for me. I
had to add a couple of -L parameters when compiling to get that in,
and then it finally worked.

Of course, my little D test program segfaults when I run, but hey,
it's progress. =)

Now I can start hacking around to see what I can learn about the
internals and actually produce a patch or two someday.

-Mike

On Nov 11, 10:25 am, Mike Farnsworth <mike.farnswo...@gmail.com>
wrote:

Christian Kamm

unread,
Nov 12, 2009, 2:33:27 PM11/12/09
to ldc...@googlegroups.com
On Thursday 12 November 2009 01:03 Mike Farnsworth wrote:
> I figured it out. I had checked out tango (0.99.8) in a directory on
> the same level as ldc, instead of inside ldc. When I ran "make
> runtime" it ran, but silently said nothing about not having the gc
> files/etc. it needed from tango. That tango-base-ldc lib of course
> had only some of what was necessary.

Ah, ok then. It's not strictly necessary to have tango in the same folder as
LDC, you can set the RUNTIME_DIR cmake variable to your tango directory.

Good luck with your experiments,
Christian

signature.asc
Reply all
Reply to author
Forward
0 new messages