Thread overview | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
February 12, 2012 -m64 doesn't work? | ||||
---|---|---|---|---|
| ||||
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 Re: -m64 doesn't work? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andre Tampubolon | > |-bin (64-bit version of dmd, impcnvgen, idgen, optabgen, plus dmd.conf)
^^ You don't need impcnvgen, idgen and optabgen.
|
February 12, 2012 Re: -m64 doesn't work? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Trass3r | 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 Re: -m64 doesn't work? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andre Tampubolon | 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 Re: -m64 doesn't work? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mike Wey | 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 Re: -m64 doesn't work? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andre Tampubolon | 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 Re: -m64 doesn't work? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andre Tampubolon | 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 Re: -m64 doesn't work? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mike Wey | 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 Re: -m64 doesn't work? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Michel Fortin | 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
>
|
Copyright © 1999-2021 by the D Language Foundation