www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Running dmd on ubuntu with AMD64

reply Jason House <jason.james.house gmail.com> writes:
I've discovered that the ubuntu linux distribution refuses to run 32 bit 
applications out of the box.  Are there plans for releasing a 64 bit 
version of dmd?  Is there anyone more experienced than me that has 
created a .deb (debian package) file that I can use?

jhouse server:~/dmd/bin$ ls -al dmd
-rwxr-xr-x 1 jhouse jhouse 1009284 2007-03-26 00:45 dmd

jhouse server:~/dmd/bin$ ./dmd
-bash: ./dmd: No such file or directory

jhouse server:~/dmd/bin$ ldd dmd
         not a dynamic executable

jhouse server:~/dmd/bin$ file dmd
dmd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for 
GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped
Apr 22 2007
parent reply Frits van Bommel <fvbommel REMwOVExCAPSs.nl> writes:
Jason House wrote:
 I've discovered that the ubuntu linux distribution refuses to run 32 bit 
 applications out of the box.  Are there plans for releasing a 64 bit 
 version of dmd?  Is there anyone more experienced than me that has 
 created a .deb (debian package) file that I can use?
 
 jhouse server:~/dmd/bin$ ls -al dmd
 -rwxr-xr-x 1 jhouse jhouse 1009284 2007-03-26 00:45 dmd
 
 jhouse server:~/dmd/bin$ ./dmd
 -bash: ./dmd: No such file or directory
 
 jhouse server:~/dmd/bin$ ldd dmd
         not a dynamic executable
 
 jhouse server:~/dmd/bin$ file dmd
 dmd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for 
 GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped

Try installing the "ia32-libs" package. Works just fine for me: ===== urxae urxae:~/opt/dmd/bin$ ls -l dmd -rwx------ 1 urxae urxae 1014564 2007-04-19 12:04 dmd urxae urxae:~/opt/dmd/bin$ ./dmd | head -n 2 # to shorten the output Digital Mars D Compiler v1.013 Copyright (c) 1999-2007 by Digital Mars written by Walter Bright urxae urxae:~/opt/dmd/bin$ file dmd dmd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), for GNU/Linux 2.2.5, stripped urxae urxae:~/opt/dmd/bin$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 6.10 Release: 6.10 Codename: edgy urxae urxae:~/opt/dmd/bin$ uname -m x86_64 =====
Apr 22 2007
next sibling parent Jason House <jason.james.house gmail.com> writes:
Worked like a charm!  I'm surprised that wasn't on the ubuntu x86 64-bit 
forum.  Time to go make another post...

Frits van Bommel wrote:
 Jason House wrote:
 I've discovered that the ubuntu linux distribution refuses to run 32 
 bit applications out of the box.  Are there plans for releasing a 64 
 bit version of dmd?  Is there anyone more experienced than me that has 
 created a .deb (debian package) file that I can use?

 jhouse server:~/dmd/bin$ ls -al dmd
 -rwxr-xr-x 1 jhouse jhouse 1009284 2007-03-26 00:45 dmd

 jhouse server:~/dmd/bin$ ./dmd
 -bash: ./dmd: No such file or directory

 jhouse server:~/dmd/bin$ ldd dmd
         not a dynamic executable

 jhouse server:~/dmd/bin$ file dmd
 dmd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for 
 GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped

Try installing the "ia32-libs" package. Works just fine for me: ===== urxae urxae:~/opt/dmd/bin$ ls -l dmd -rwx------ 1 urxae urxae 1014564 2007-04-19 12:04 dmd urxae urxae:~/opt/dmd/bin$ ./dmd | head -n 2 # to shorten the output Digital Mars D Compiler v1.013 Copyright (c) 1999-2007 by Digital Mars written by Walter Bright urxae urxae:~/opt/dmd/bin$ file dmd dmd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), for GNU/Linux 2.2.5, stripped urxae urxae:~/opt/dmd/bin$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 6.10 Release: 6.10 Codename: edgy urxae urxae:~/opt/dmd/bin$ uname -m x86_64 =====

Apr 22 2007
prev sibling parent reply Jason House <jason.james.house gmail.com> writes:
Any further tips on getting rebuild/dsss to work?  I'm getting linker 
errors.  I'm assuming dmd is generating a 32 bit executable and failing 
to link with 64 bit libraries.  Can dmd generate a 64 bit executable? 
I'm not sure how to configure it to do so.  I did try hacking at the 
rebuild config files to see if I could get it to work (resulting file 
below).

Can gdc do better?

 $ dsss build
 housebot.d => housebot-0.6
 + /bin/rebuild -Idsss_imports/ -I. -S./ -I/include/d -S/lib/   -oqdsss_objs
-Dddoc -unittest -w -gc housebot.d -ofhousebot-0.6
 gcc dsss_objs/_housebot.o dsss_objs/nmd_gcstats.o dsss_objs/_ipc.o
dsss_objs/_gtp.o -o housebot-0.6 -g -m32 -lphobos -lpthread -lm -Xlinker
--start-group -Xlinker -lphobos -Xlinker -L./ -Xlinker -L/lib/ -Xlinker
-L/home/jhouse/housebot/dmd/bin/../lib -Xlinker
-L/home/jhouse/housebot/dmd/bin/../lib
 /usr/bin/ld: skipping incompatible /usr/bin/../lib/libpthread.so when
searching for -lpthread
 /usr/bin/ld: skipping incompatible /usr/bin/../lib/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
 Command /bin/rebuild returned with code 65280, aborting.

$ cat /etc/rebuild/default profile=dmd-posix $ cat /etc/rebuild/dmd-posix profile=phobos compiler=dmd inifile=dmd.conf exeext= objext=o version=DigitalMars noversion=GNU version=linux noversion=Unix version=Posix noversion=Windows noversion=Win32 noversion=Win64 noversion=X86 noversion=PPC version=X86_64 version=D_InlineAsm noversion=D_InlineAsm_X86 noversion=D_InlineAsm_PPC version=D_InlineAsm_X86_64 version=LittleEndian noversion=BigEndian [compile] cmd=dmd -version=Posix -c $i flag=$i incdir=-I$i libdir=-L-L$i optimize=-O version=-version=$i [link] cmd=dmd -L--start-group -L-lphobos $i -of$o libdir=-L-L$i lib=-L-l$i flag=-L$i [liblink] safe=yes cmd=ar rc $o $i libdir= lib= flag= [postliblink] cmd=ranlib $i [shliblink] shlibs=no [dyliblink] dylibs=no Frits van Bommel wrote:
 Jason House wrote:
 I've discovered that the ubuntu linux distribution refuses to run 32 
 bit applications out of the box.  Are there plans for releasing a 64 
 bit version of dmd?  Is there anyone more experienced than me that has 
 created a .deb (debian package) file that I can use?

 jhouse server:~/dmd/bin$ ls -al dmd
 -rwxr-xr-x 1 jhouse jhouse 1009284 2007-03-26 00:45 dmd

 jhouse server:~/dmd/bin$ ./dmd
 -bash: ./dmd: No such file or directory

 jhouse server:~/dmd/bin$ ldd dmd
         not a dynamic executable

 jhouse server:~/dmd/bin$ file dmd
 dmd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for 
 GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped

Try installing the "ia32-libs" package. Works just fine for me: ===== urxae urxae:~/opt/dmd/bin$ ls -l dmd -rwx------ 1 urxae urxae 1014564 2007-04-19 12:04 dmd urxae urxae:~/opt/dmd/bin$ ./dmd | head -n 2 # to shorten the output Digital Mars D Compiler v1.013 Copyright (c) 1999-2007 by Digital Mars written by Walter Bright urxae urxae:~/opt/dmd/bin$ file dmd dmd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), for GNU/Linux 2.2.5, stripped urxae urxae:~/opt/dmd/bin$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 6.10 Release: 6.10 Codename: edgy urxae urxae:~/opt/dmd/bin$ uname -m x86_64 =====

Apr 22 2007
next sibling parent Jason House <jason.james.house gmail.com> writes:
Jason House wrote:
 Any further tips on getting rebuild/dsss to work?  I'm getting linker 
 errors.  I'm assuming dmd is generating a 32 bit executable and failing 
 to link with 64 bit libraries.  Can dmd generate a 64 bit executable? 
 I'm not sure how to configure it to do so.  I did try hacking at the 
 rebuild config files to see if I could get it to work (resulting file 
 below).
 
 Can gdc do better?

gdc has an amd 64 binary release that works great. No rebuild config changes required (besides telling /etc/rebuild/default to use gdc-posix). There's a related thread from earlier this month that says dmd does not support 64 bit yet.
Apr 22 2007
prev sibling parent reply Frits van Bommel <fvbommel REMwOVExCAPSs.nl> writes:
Jason House wrote:
 Any further tips on getting rebuild/dsss to work?  I'm getting linker 
 errors.

This has nothing to do with rebuild/dsss. I had the same problem with "pure" dmd. (Sorry for forgetting to mention that in my previous post)
 I'm assuming dmd is generating a 32 bit executable and failing 
 to link with 64 bit libraries. 

Yes, that's exactly what's happening AFAIK I got it to work was by running dmd in a 32-bit chroot. See http://ubuntuforums.org/showthread.php?t=24575 for step-by-step instructions. You'll want to install DMD and gcc+binutils into the chroot, and create a symlink named "dmd" (outside the chroot) to the do_chroot script they provide.
 Can dmd generate a 64 bit executable? 

No, DMD can only generate 32-bit executables. [snip]
 Can gdc do better?

Although I haven't been able to compile it myself on amd64, the binary distribution[1] worked straight out of the box IIRC. It's a native 64-bit executable and produces 64-bit code. (It's supposed to also be able to generate 32-bit code, but I haven't tried that) Note that there is at least one issue with it, but considering this is the first release to support 64-bit it works pretty well. Unfortunately, that issue means that Tango's formatted output functions don't compile and (G)Phobos' formatted output doesn't support structs... Other than that I haven't had any problems with it, as far as I can remember. [1]: gdc-0.23-x86_64-linux-gcc-4.1.1.tar.bz2 from http://sourceforge.net/project/showfiles.php?group_id=154306
Apr 22 2007
parent Jason House <jason.james.house gmail.com> writes:
Now that I've gotten gdc to work on ubuntu with AMD64, I've started 
experimenting with the coverage analysis.  gdc -cov will build object 
files, but doesn't link.  Any tips?

dsss build -cov -llgcov
housebot.d => housebot-0.6
+ /bin/rebuild -Idsss_imports/ -I. -S./ -I/include/d -S/lib/ -cov 
-llgcov   -oqdsss_objs -Dddoc -unittest -w -g housebot.d -ofhousebot-0.6
/usr/bin/ld: cannot find -lgcov

dsss build -cov -lgcov --libdir=/usr/lib/gcc/x86_64-linux-gnu/4.1.2
housebot.d => housebot-0.6
+ /bin/rebuild -Idsss_imports/ -I. -S./ -I/include/d 
-S/usr/lib/gcc/x86_64-linux-gnu/4.1.2/ -cov -lgcov   -oqdsss_objs -Dddoc 
-unittest -w -g housebot.d -ofhousebot-0.6
dsss_objs/_housebot.o: In function `global constructors keyed to 
0__D8housebot21mainThreadControllers6__initZ':
/home/jhouse/housebot/0.6/housebot.d:1: undefined reference to `__gcov_init'
...
May 30 2007