When I was looking at dmd's options, I found this: m64 generate 64 bit code
I guessed it behaves like gcc (m64 for 64 bit code and m32 for 32 bit code, assuming you have the multilibs), so I did a rebuild. This is the structure of my /opt/dmd-dev |-bin (64-bit version of dmd, impcnvgen, idgen, optabgen, plus dmd.conf) |-import |---core |-----stdc |-----sync |-----sys |-------osx |---------mach |-------posix |---------arpa |---------net |---------netinet |---------sys |-------windows |-lib32 (libdruntime-linux32.a and libphobos.a) |-lib64 (libdruntime-linux64.a and libphobos.a) |-phobos |---std |-----c |-------freebsd |-------linux |-------osx |-------windows |-----internal |-------math |-------windows |-----net |-----windows And this is my dmd.conf: [Environment] DFLAGS=-I/opt/dmd-dev/import -I/opt/dmd-dev/phobos -L-L/opt/dmd-dev/lib32 -L-L/opt/dmd-dev/lib64 dmd -32 works fine. But either dmd or dmd -m64 doesn't work, e.g: $ dmd -m64 einstein2b.d /usr/bin/ld: skipping incompatible /opt/dmd-dev/lib32//libphobos2.a when searching for -lphobos2 /usr/bin/ld: cannot find -lphobos2 collect2: ld returned 1 exit status --- errorlevel 1 I wonder why ld searches at /opt/dmd-dev/lib32, whereas it should be /opt/dmd-dev/lib64 ?