Thread overview
-m64 doesn't work?
Feb 12, 2012
Andre Tampubolon
Feb 12, 2012
Trass3r
Feb 12, 2012
Andre Tampubolon
Feb 12, 2012
Mike Wey
Feb 12, 2012
Andre Tampubolon
Feb 12, 2012
Mike Wey
Feb 12, 2012
Andre Tampubolon
Feb 12, 2012
Michel Fortin
Feb 12, 2012
Andre Tampubolon
February 12, 2012
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 ?
February 12, 2012
>   |-bin (64-bit version of dmd, impcnvgen, idgen, optabgen, plus dmd.conf)

^^ You don't need impcnvgen, idgen and optabgen.
February 12, 2012
Uhmm OK. But what does it do with dmd? I mean, dmd -m64 still doesn't work.

Anyway, I used to build both versions and put this on my ~/.bashrc:
alias dmd32='/opt/dmd-dev/bin32/dmd'
alias dmd64='/opt/dmd-dev/bin64/dmd'

But if a single dmd can generate both 32 and 64 bit code, it will be very convenient.

On 02/12/2012 06:58 PM, Trass3r wrote:
>>   |-bin (64-bit version of dmd, impcnvgen, idgen, optabgen, plus dmd.conf)
> 
> ^^ You don't need impcnvgen, idgen and optabgen.

February 12, 2012
On 02/12/2012 09:26 AM, Andre Tampubolon wrote:
> 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

Try adding -L--no-warn-search-mismatch

-- 
Mike Wey
February 12, 2012
Hmm doesn't work. The same error still applies.

On 02/12/2012 08:36 PM, Mike Wey wrote:
> On 02/12/2012 09:26 AM, Andre Tampubolon wrote:
>> 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
> 
> Try adding -L--no-warn-search-mismatch
> 

February 12, 2012
On Sunday, 12 February 2012 at 08:26:07 UTC, Andre Tampubolon wrote:

>  |-lib32 (libdruntime-linux32.a and libphobos.a)
>  |-lib64 (libdruntime-linux64.a and libphobos.a)

... Are you sure it's libphobos.a and not libphobos2.a?

> 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 ?

Actually it searches both directories all the time because dmd.conf adds the two to the link path. The theory is that the linker should just discard the wrong one.

--
Michel Fortin
michel.fortin@michelf.com
http://michelf.com

February 12, 2012
On 02/12/2012 03:21 PM, Andre Tampubolon wrote:
> Hmm doesn't work. The same error still applies.
>
> On 02/12/2012 08:36 PM, Mike Wey wrote:
>> On 02/12/2012 09:26 AM, Andre Tampubolon wrote:
>>> 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
>>
>> Try adding -L--no-warn-search-mismatch
>>
>

Can you post the output of dmd when compiling with: "-v" ?

-- 
Mike Wey
February 12, 2012
This is the log:
http://pastebin.com/bGt7MVd2

Anyway, I found the culprit, which is ~/dmd.conf. The content is:
[Environment]
DFLAGS=-I/opt/dmd-dev/import -I/opt/dmd-dev/phobos -L-L/opt/dmd-dev/lib32/

That's why dmd couldn't locate the 64 bit libs. I should use only 1 dmd.conf, which is located in /opt/dmd-dev/bin. Now -m64 works fine :)

On 02/12/2012 09:45 PM, Mike Wey wrote:
> On 02/12/2012 03:21 PM, Andre Tampubolon wrote:
>> Hmm doesn't work. The same error still applies.
>>
>> On 02/12/2012 08:36 PM, Mike Wey wrote:
>>> On 02/12/2012 09:26 AM, Andre Tampubolon wrote:
>>>> 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
>>>
>>> Try adding -L--no-warn-search-mismatch
>>>
>>
> 
> Can you post the output of dmd when compiling with: "-v" ?
> 

February 12, 2012
Sorry, libphobos.a is a typo :)

On 02/12/2012 09:42 PM, Michel Fortin wrote:
> On Sunday, 12 February 2012 at 08:26:07 UTC, Andre Tampubolon wrote:
> 
>>  |-lib32 (libdruntime-linux32.a and libphobos.a)
>>  |-lib64 (libdruntime-linux64.a and libphobos.a)
> 
> ... Are you sure it's libphobos.a and not libphobos2.a?
> 
>> 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 ?
> 
> Actually it searches both directories all the time because dmd.conf adds the two to the link path. The theory is that the linker should just discard the wrong one.
> 
> -- 
> Michel Fortin
> michel.fortin@michelf.com
> http://michelf.com
>