Thread overview
linux 64/32
Feb 13, 2006
Kevin Bealer
Feb 13, 2006
Sean Kelly
Feb 14, 2006
Kevin Bealer
Feb 14, 2006
Thomas Kuehne
Feb 14, 2006
John Demme
Feb 14, 2006
Kevin Bealer
February 13, 2006
I tried a bit ago to compile D programs on my computer, under Linux - which I upgraded to a 64 bit machine.  This didn't work.  I thought I could at least get a 32 bit executable, but it had linking errors.  I was able to fix these, but each fix only revealed a further obstacle - I stopped when I got to pthreads, which I couldn't find a 32 bit version of (I suspect I could build one, but I have no idea what other libs I would be missing at that point.)

I was surprised, when I tried under WinXP and it worked - I assumed this is because it doesn't do 64 bits yet?

In any case, has anyone figured out how to build code on a 64 bit machine?  If it's completely impossible for now, I'm okay with that, I just don't want to climb the mountain if there's nothing at the top.

If noone knows, I can try again and report what I did and give more details.

(P.S. the previous try was with a D compiler that was several versions back.)

Thanks,
Kevin


February 13, 2006
Kevin Bealer wrote:
> I tried a bit ago to compile D programs on my computer, under Linux - which I
> upgraded to a 64 bit machine.  This didn't work.  I thought I could at least get
> a 32 bit executable, but it had linking errors.  I was able to fix these, but
> each fix only revealed a further obstacle - I stopped when I got to pthreads,
> which I couldn't find a 32 bit version of (I suspect I could build one, but I
> have no idea what other libs I would be missing at that point.)
> 
> I was surprised, when I tried under WinXP and it worked - I assumed this is
> because it doesn't do 64 bits yet?
> 
> In any case, has anyone figured out how to build code on a 64 bit machine?  If
> it's completely impossible for now, I'm okay with that, I just don't want to
> climb the mountain if there's nothing at the top.

Are you using a 32 or 64 bit kernel?  Using an AMD-64 all by itself should affect things--it's the OS that matters.  I'm not sure about other changes, but the pthread stuff shouldn't be too difficult to fix, as that is all declared in std/thread.d--simply add "version(x86_64)" blocks where appropriate.


Sean
February 14, 2006
In article <dsr2jl$4n0$1@digitaldaemon.com>, Sean Kelly says...
>
>Kevin Bealer wrote:
>> I tried a bit ago to compile D programs on my computer, under Linux - which I upgraded to a 64 bit machine.  This didn't work.  I thought I could at least get a 32 bit executable, but it had linking errors.  I was able to fix these, but each fix only revealed a further obstacle - I stopped when I got to pthreads, which I couldn't find a 32 bit version of (I suspect I could build one, but I have no idea what other libs I would be missing at that point.)
>> 
>> I was surprised, when I tried under WinXP and it worked - I assumed this is because it doesn't do 64 bits yet?
>> 
>> In any case, has anyone figured out how to build code on a 64 bit machine?  If it's completely impossible for now, I'm okay with that, I just don't want to climb the mountain if there's nothing at the top.
>
>Are you using a 32 or 64 bit kernel?  Using an AMD-64 all by itself should affect things--it's the OS that matters.  I'm not sure about other changes, but the pthread stuff shouldn't be too difficult to fix, as that is all declared in std/thread.d--simply add "version(x86_64)" blocks where appropriate.
>
>
>Sean

I'm using a 64 bit kernel, Linux Ubuntu.  I tried this again with the latest version, and it had an error, but I can work around it.

I don't think I could have just missed this before;  I don't know if Ubuntu has upgraded their libraries, or D has changed, but somehow it works now:

It seems like what I need to do to compile is:

dmd -c hello.d
gcc hello.o -o hi -lphobos -lpthread -lm -m32

I don't know how to specify the "-m32" to dmd - passing as a link flag doesn't seem to work, but I can build binaries again, hurrah!  In any case, the last time I looked at this (a month or 3 ago), I spend many hours with libraries with no success (at that time).

Thanks,
Kevin



February 14, 2006
A 64-bit Linux system should be able to run 32-bit binaries as long as it has the 32-bit versions of the libraries to link to (both the static libraries and dynamic).  I'm not sure about Ubuntu, but I know Gentoo 64-bit provides 32-bit libraries.

You should be able to send -m32 to the gcc linker using -L-m32 .  You may also want to check out gdc.  It may be able to generate 64-bit code, although I'm not sure.

I don't have a 64-bit box (yet) so I'm not sure how much help that was, but in theory it should be possible.

BTW, I think the reason there aren't any issues with Windows in because Windows doesn't use 64-bit anything, just 32.  They may have upgraded since I last heard, however.

~John Demme

Kevin Bealer wrote:

> I tried a bit ago to compile D programs on my computer, under Linux -
> which I
> upgraded to a 64 bit machine.  This didn't work.  I thought I could at
> least get
> a 32 bit executable, but it had linking errors.  I was able to fix these,
> but each fix only revealed a further obstacle - I stopped when I got to
> pthreads, which I couldn't find a 32 bit version of (I suspect I could
> build one, but I have no idea what other libs I would be missing at that
> point.)
> 
> I was surprised, when I tried under WinXP and it worked - I assumed this is because it doesn't do 64 bits yet?
> 
> In any case, has anyone figured out how to build code on a 64 bit machine?
>  If it's completely impossible for now, I'm okay with that, I just don't
> want to climb the mountain if there's nothing at the top.
> 
> If noone knows, I can try again and report what I did and give more details.
> 
> (P.S. the previous try was with a D compiler that was several versions
> back.)
> 
> Thanks,
> Kevin

February 14, 2006
Kevin Bealer schrieb am 2006-02-14:
> In article <dsr2jl$4n0$1@digitaldaemon.com>, Sean Kelly says...
>>
>>Kevin Bealer wrote:
>>> I tried a bit ago to compile D programs on my computer, under Linux - which I upgraded to a 64 bit machine.  This didn't work.  I thought I could at least get a 32 bit executable, but it had linking errors.  I was able to fix these, but each fix only revealed a further obstacle - I stopped when I got to pthreads, which I couldn't find a 32 bit version of (I suspect I could build one, but I have no idea what other libs I would be missing at that point.)
>>> 
>>> I was surprised, when I tried under WinXP and it worked - I assumed this is because it doesn't do 64 bits yet?
>>> 
>>> In any case, has anyone figured out how to build code on a 64 bit machine?  If it's completely impossible for now, I'm okay with that, I just don't want to climb the mountain if there's nothing at the top.
>>
>>Are you using a 32 or 64 bit kernel?  Using an AMD-64 all by itself should affect things--it's the OS that matters.  I'm not sure about other changes, but the pthread stuff shouldn't be too difficult to fix, as that is all declared in std/thread.d--simply add "version(x86_64)" blocks where appropriate.
>>
>>
>>Sean
>
> I'm using a 64 bit kernel, Linux Ubuntu.  I tried this again with the latest version, and it had an error, but I can work around it.
>
> I don't think I could have just missed this before;  I don't know if Ubuntu has upgraded their libraries, or D has changed, but somehow it works now:
>
> It seems like what I need to do to compile is:
>
> dmd -c hello.d
> gcc hello.o -o hi -lphobos -lpthread -lm -m32
>
> I don't know how to specify the "-m32" to dmd - passing as a link flag doesn't seem to work, but I can build binaries again, hurrah!  In any case, the last time I looked at this (a month or 3 ago), I spend many hours with libraries with no success (at that time).
>
> Thanks,
> Kevin

I am using dmd on AMD-64 with Gentoo with the following setup:

1) 32bit emulation libs:
emul-linux-x86-baselibs-2.3
emul-linux-x86-compat-1.0
emul-linux-x86-glibc-1000

2) gcc wraper: /opt/dmd/bin/gcc
#!/bin/bash
gcc -m32 $*

3) changed path, so that dmd uses the gcc script PATH=/opt/dmd/bin/:$PATH dmd somesource.d

Thomas



February 14, 2006
Thanks;  I tried this, but using -Xlinker, I get this:

/usr/bin/ld: unrecognised emulation mode: 32
Supported emulations: elf_i386 i386linux
collect2: ld returned 1 exit status

It seems like "-m32" needs to go to the compiler phase, even when just linking the code.  I don't know exactly why, though.  Maybe there is glue code *between* the library and application that needs to be 32 or 64.

It might be simple for dmd to automatically provide the -m32 option, but of course the user will need all the 32 bit versions of things too (which I have, but which will not be standard on most 64 bit systems I think).

In any case, it all works for me now.

BTW, Walter, great idea on the -run option, I've always thought D was only inches from being a great scripting language.

Kevin


In article <dsrmje$m91$1@digitaldaemon.com>, John Demme says...
>
>A 64-bit Linux system should be able to run 32-bit binaries as long as it has the 32-bit versions of the libraries to link to (both the static libraries and dynamic).  I'm not sure about Ubuntu, but I know Gentoo 64-bit provides 32-bit libraries.
>
>You should be able to send -m32 to the gcc linker using -L-m32 .  You may also want to check out gdc.  It may be able to generate 64-bit code, although I'm not sure.
>
>I don't have a 64-bit box (yet) so I'm not sure how much help that was, but in theory it should be possible.
>
>BTW, I think the reason there aren't any issues with Windows in because Windows doesn't use 64-bit anything, just 32.  They may have upgraded since I last heard, however.
>
>~John Demme
>
>Kevin Bealer wrote:
>
>> I tried a bit ago to compile D programs on my computer, under Linux -
>> which I
>> upgraded to a 64 bit machine.  This didn't work.  I thought I could at
>> least get
>> a 32 bit executable, but it had linking errors.  I was able to fix these,
>> but each fix only revealed a further obstacle - I stopped when I got to
>> pthreads, which I couldn't find a 32 bit version of (I suspect I could
>> build one, but I have no idea what other libs I would be missing at that
>> point.)
>> 
>> I was surprised, when I tried under WinXP and it worked - I assumed this is because it doesn't do 64 bits yet?
>> 
>> In any case, has anyone figured out how to build code on a 64 bit machine?
>>  If it's completely impossible for now, I'm okay with that, I just don't
>> want to climb the mountain if there's nothing at the top.
>> 
>> If noone knows, I can try again and report what I did and give more details.
>> 
>> (P.S. the previous try was with a D compiler that was several versions
>> back.)
>> 
>> Thanks,
>> Kevin
>