DMD on x86_64

Lars T. Kyllingstad public at kyllingen.NOSPAMnet
Wed Feb 17 08:58:04 PST 2010


Robert Clipsham wrote:
> I've been wanting to try D2 properly for a while now, but as I use linux 
> x86-64 I've had to resort to using a virtual machine, which is really 
> off putting when I just want to play around with it. I've read multiple 
> threads about getting dmd working with a multilib system, but I still 
> can't get it working, here's what I've tried:
> 
> test.d:
> import std.stdio;
> 
> void main()
> {
>         writeln( "Hello World!" );
> }
> 
> % dmd -v test.d
> -- snip --
> gcc test.o -o test -m32 -Xlinker -L./../lib -lphobos2 -lpthread -lm
> /usr/bin/ld: skipping incompatible 
> /usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.3/../../../libpthread.so when 
> searching for -lpthread
> /usr/bin/ld: skipping incompatible 
> /usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.3/../../../libpthread.a when 
> searching for -lpthread
> /usr/bin/ld: skipping incompatible /usr/lib/libpthread.so when searching 
> for -lpthread
> /usr/bin/ld: skipping incompatible /usr/lib/libpthread.a when searching 
> for -lpthread
> /usr/bin/ld: cannot find -lpthread
> collect2: ld returned 1 exit status
> --- errorlevel 1
> 
> I have a 32 bit version of libpthread in /opt/lib32/lib, so I then tried:
> 
> % dmd test.d -L-L/opt/lib32/lib
> /usr/bin/ld: skipping incompatible 
> /usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.3/../../../libpthread.so when 
> searching for -lpthread
> /usr/bin/ld: skipping incompatible 
> /usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.3/../../../libpthread.a when 
> searching for -lpthread
> /usr/bin/ld: skipping incompatible /usr/lib/libpthread.so when searching 
> for -lpthread
> /usr/bin/ld: skipping incompatible /usr/lib/libpthread.a when searching 
> for -lpthread
> /usr/bin/ld: cannot find -lpthread
> collect2: ld returned 1 exit status
> --- errorlevel 1
> 
> ld still seems to be trying to use the 64 bit version. Trying to link 
> manually with gcc (some options tweaked):
> 
> % gcc test.o -o test -m32 -Xlinker -L./../lib -L/opt/lib32/lib 
> -L/opt/lib32/usr/lib -lphobos2 -lpthread -lm
> /usr/bin/ld: skipping incompatible /lib/libpthread.so.0 when searching 
> for /lib/libpthread.so.0
> /usr/bin/ld: cannot find /lib/libpthread.so.0
> collect2: ld returned 1 exit status
> 
> This seemed to get less errors than before. When I specified the path to 
> libpthread manually it started complaining about libgcc. Using -v with 
> the above command I found the linking command, then adapted that and 
> tried manually again, but was left with the error:
> 
> /usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 
> 0000000008048c90
> 
> When editing the linking command I had to remove a selection of gcc 
> libraries that I don't have 32 bit versions of, which could be the 
> issue, however according to nm none of the other .o's or .a's that are 
> meant to get linked contain _start. Does anyone have any idea how I can 
> get dmd working with a multi lib x86-64 system? I'm using Arch Linux, if 
> you could point me in the right direction to get the missing libraries 
> or whatever's needed to get dmd working let me know, thanks.
> 
> Robert

Try typing:

   export LD_LIBRARY_PATH="/opt/lib32"

before compiling.

-Lars


More information about the Digitalmars-d-learn mailing list