Bug 6822 – New ubuntu linking rules prevent dmd from linking programs on Ubuntu 11.10

Status
RESOLVED
Resolution
FIXED
Severity
critical
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Linux
Creation time
2011-10-17T05:42:00Z
Last change time
2011-10-19T11:47:11Z
Keywords
link-failure
Assigned to
nobody
Creator
schveiguy

Comments

Comment #0 by schveiguy — 2011-10-17T05:42:28Z
I recently upgraded to Ubuntu 11.10, and dmd complains during link that functions defined in -lrt are missing. using dmd -v, I get: gcc testbool.o -o testbool -m32 -Xlinker -L/home/steves/dmd-2.054/linux/bin32/../lib32 -Xlinker -L/home/steves/dmd-2.054/linux/bin32/../lib64 -Xlinker --no-warn-search-mismatch -Xlinker --export-dynamic -lrt -lphobos2 -lpthread -lm Note that -lrt comes before -lphobos2, where the functions are needed. I'm not sure how the compiler worked on ubuntu 11.04 (the previous release), but apparently there are stricter rules. I don't know how to fix this, you want to be able to link libs before and after phobos is specified on the command line, so we may need to either explicitly name phobos2 in the dmd.conf, or have two sets of DFLAGS. However, as of now, I cannot link anything without using -v and manually running the link step, adding -lrt to the end.
Comment #1 by braddr — 2011-10-19T09:16:00Z
The right answer for this one probably is moving the -lrt part out of dmd.conf and into core/time.d as pragma(lib, "rt"), conditional on linux. I haven't tried it though.
Comment #2 by schveiguy — 2011-10-19T09:31:13Z
That doesn't work. pragma(lib) only works if you are compiling all files at the same time. This fails to compile: void main() {} I didn't import std.datetime at all, so the compiler would never know that it had to link -lrt.
Comment #3 by schveiguy — 2011-10-19T09:31:54Z
(In reply to comment #2) > I didn't import std.datetime at all or rather core.time...
Comment #4 by bugzilla — 2011-10-19T11:37:15Z
Comment #5 by schveiguy — 2011-10-19T11:47:11Z
works, thanks. Note that it still works even if you leave -L-rt in dmd.conf, even though it's not necessary to have it there.