Обсуждение: Error building 32 bit on 64 bit linux system

Поиск
Список
Период
Сортировка

Error building 32 bit on 64 bit linux system

От
Doug Knight
Дата:
All,<br /> I am trying to build 8.2.5, forcing to a 32 bit build on a 64 bit system. I have set CFLAGS=-m32, and I run
theconfigure and make/make install as follows:<br /><br /> setarch i386 ./configure<br /> setarch i386 make<br />
setarchi386 make install<br /><br /> However, I get the following error (using timezone for example):<br /><br /> $
make<br/> gcc -m32 -Wall -Wmissing-prototypes -Wpointer-arith -Winline -Wdeclaration-after-statement -Wendif-labels
-fno-strict-aliasing-I../../src/include -D_GNU_SOURCE   -c -o localtime.o localtime.c<br /> gcc -m32 -Wall
-Wmissing-prototypes-Wpointer-arith -Winline -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing
-I../../src/include-D_GNU_SOURCE   -c -o strftime.o strftime.c<br /> gcc -m32 -Wall -Wmissing-prototypes
-Wpointer-arith-Winline -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -I../../src/include
-D_GNU_SOURCE  -c -o pgtz.o pgtz.c<br /> /usr/bin/ld -r -o SUBSYS.o localtime.o strftime.o pgtz.o<br /> /usr/bin/ld:
Relocatablelinking with relocations from format elf32-i386 (localtime.o) to format elf64-x86-64 (SUBSYS.o) is not
supported<br/> make: *** [SUBSYS.o] Error 1<br /><br /> Funny thing is, there is no SUBSYS.o in my current directory.
IfI build from the top, I see this same error in each dirctory/makefile where a SUBSYS.o is linked with. If I search my
buildtree after a top-down build, I do not see any SUBSYS.O files at all. Where is this SUBSYS.o getting created, and
whyisn't it being created as a 32 bit file instead of 64 bit?<br /><br /> Doug Knight<br /> WSI Corp<br /> Andover, MA,
USA 

Re: Error building 32 bit on 64 bit linux system

От
Zdenek Kotala
Дата:
I'm not sure, but maybe linker also needs a switch to make 32bit output.
    Zdenek

Doug Knight napsal(a):
> All,
> I am trying to build 8.2.5, forcing to a 32 bit build on a 64 bit 
> system. I have set CFLAGS=-m32, and I run the configure and make/make 
> install as follows:
> 
> setarch i386 ./configure
> setarch i386 make
> setarch i386 make install
> 
> However, I get the following error (using timezone for example):
> 
> $ make
> gcc -m32 -Wall -Wmissing-prototypes -Wpointer-arith -Winline 
> -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing 
> -I../../src/include -D_GNU_SOURCE   -c -o localtime.o localtime.c
> gcc -m32 -Wall -Wmissing-prototypes -Wpointer-arith -Winline 
> -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing 
> -I../../src/include -D_GNU_SOURCE   -c -o strftime.o strftime.c
> gcc -m32 -Wall -Wmissing-prototypes -Wpointer-arith -Winline 
> -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing 
> -I../../src/include -D_GNU_SOURCE   -c -o pgtz.o pgtz.c
> /usr/bin/ld -r -o SUBSYS.o localtime.o strftime.o pgtz.o
> /usr/bin/ld: Relocatable linking with relocations from format elf32-i386 
> (localtime.o) to format elf64-x86-64 (SUBSYS.o) is not supported
> make: *** [SUBSYS.o] Error 1
> 
> Funny thing is, there is no SUBSYS.o in my current directory. If I build 
> from the top, I see this same error in each dirctory/makefile where a 
> SUBSYS.o is linked with. If I search my build tree after a top-down 
> build, I do not see any SUBSYS.O files at all. Where is this SUBSYS.o 
> getting created, and why isn't it being created as a 32 bit file instead 
> of 64 bit?
> 
> Doug Knight
> WSI Corp
> Andover, MA, USA



Re: Error building 32 bit on 64 bit linux system

От
Andrew Dunstan
Дата:

Doug Knight wrote:
> All,
> I am trying to build 8.2.5, forcing to a 32 bit build on a 64 bit 
> system. I have set CFLAGS=-m32, and I run the configure and make/make 
> install as follows:
>
> setarch i386 ./configure
> setarch i386 make
> setarch i386 make install
>
> However, I get the following error (using timezone for example):
>
> $ make
> gcc -m32 -Wall -Wmissing-prototypes -Wpointer-arith -Winline 
> -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing 
> -I../../src/include -D_GNU_SOURCE   -c -o localtime.o localtime.c
> gcc -m32 -Wall -Wmissing-prototypes -Wpointer-arith -Winline 
> -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing 
> -I../../src/include -D_GNU_SOURCE   -c -o strftime.o strftime.c
> gcc -m32 -Wall -Wmissing-prototypes -Wpointer-arith -Winline 
> -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing 
> -I../../src/include -D_GNU_SOURCE   -c -o pgtz.o pgtz.c
> /usr/bin/ld -r -o SUBSYS.o localtime.o strftime.o pgtz.o
> /usr/bin/ld: Relocatable linking with relocations from format 
> elf32-i386 (localtime.o) to format elf64-x86-64 (SUBSYS.o) is not 
> supported
> make: *** [SUBSYS.o] Error 1
>
> Funny thing is, there is no SUBSYS.o in my current directory. If I 
> build from the top, I see this same error in each dirctory/makefile 
> where a SUBSYS.o is linked with. If I search my build tree after a 
> top-down build, I do not see any SUBSYS.O files at all. Where is this 
> SUBSYS.o getting created, and why isn't it being created as a 32 bit 
> file instead of 64 bit?
>

"man ld" IYF.

It looks like you need the --oformat option to tell the linker you want 
32bit output.

Of course you won't find the SUBSYS.o files - it it the creation of 
those that is failing.

cheers

andrew


Re: Error building 32 bit on 64 bit linux system

От
Doug Knight
Дата:
Thanks Andrew, I missed the little -o in front of the SUBSYS.o. I did find that if I did "export LDEMULATION=elf_i386"
Iwas able to link successfully. Now I just need to tell configure that I want to use the 32 bit perl libs, not the 64
bitones it keeps finding by using:<br /><br /> $PERL -MConfig -e 'print $Config{archlibexp}'<br /><br /> Both 32 and 64
bitlibraries are installed on my system, but the return from the above command within configure points to the 64 bit
libs,as the perl executable is a 64 bit file. I think my better option is to build my 32 bit versions on a 32 bit
CentOSVM I have setup.<br /><br /> Doug<br /><br /> On Mon, 2008-02-18 at 09:48 -0500, Andrew Dunstan wrote:
<blockquotetype="CITE"><pre>
 

<font color="#000000">Doug Knight wrote:</font>
<font color="#000000">> All,</font>
<font color="#000000">> I am trying to build 8.2.5, forcing to a 32 bit build on a 64 bit </font>
<font color="#000000">> system. I have set CFLAGS=-m32, and I run the configure and make/make </font>
<font color="#000000">> install as follows:</font>
<font color="#000000">></font>
<font color="#000000">> setarch i386 ./configure</font>
<font color="#000000">> setarch i386 make</font>
<font color="#000000">> setarch i386 make install</font>
<font color="#000000">></font>
<font color="#000000">> However, I get the following error (using timezone for example):</font>
<font color="#000000">></font>
<font color="#000000">> $ make</font>
<font color="#000000">> gcc -m32 -Wall -Wmissing-prototypes -Wpointer-arith -Winline </font>
<font color="#000000">> -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing </font>
<font color="#000000">> -I../../src/include -D_GNU_SOURCE   -c -o localtime.o localtime.c</font>
<font color="#000000">> gcc -m32 -Wall -Wmissing-prototypes -Wpointer-arith -Winline </font>
<font color="#000000">> -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing </font>
<font color="#000000">> -I../../src/include -D_GNU_SOURCE   -c -o strftime.o strftime.c</font>
<font color="#000000">> gcc -m32 -Wall -Wmissing-prototypes -Wpointer-arith -Winline </font>
<font color="#000000">> -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing </font>
<font color="#000000">> -I../../src/include -D_GNU_SOURCE   -c -o pgtz.o pgtz.c</font>
<font color="#000000">> /usr/bin/ld -r -o SUBSYS.o localtime.o strftime.o pgtz.o</font>
<font color="#000000">> /usr/bin/ld: Relocatable linking with relocations from format </font>
<font color="#000000">> elf32-i386 (localtime.o) to format elf64-x86-64 (SUBSYS.o) is not </font>
<font color="#000000">> supported</font>
<font color="#000000">> make: *** [SUBSYS.o] Error 1</font>
<font color="#000000">></font>
<font color="#000000">> Funny thing is, there is no SUBSYS.o in my current directory. If I </font>
<font color="#000000">> build from the top, I see this same error in each dirctory/makefile </font>
<font color="#000000">> where a SUBSYS.o is linked with. If I search my build tree after a </font>
<font color="#000000">> top-down build, I do not see any SUBSYS.O files at all. Where is this </font>
<font color="#000000">> SUBSYS.o getting created, and why isn't it being created as a 32 bit </font>
<font color="#000000">> file instead of 64 bit?</font>
<font color="#000000">></font>

<font color="#000000">"man ld" IYF.</font>

<font color="#000000">It looks like you need the --oformat option to tell the linker you want </font>
<font color="#000000">32bit output.</font>

<font color="#000000">Of course you won't find the SUBSYS.o files - it it the creation of </font>
<font color="#000000">those that is failing.</font>

<font color="#000000">cheers</font>

<font color="#000000">andrew</font>

</pre></blockquote>

Re: Error building 32 bit on 64 bit linux system

От
Tom Lane
Дата:
Doug Knight <dknight@wsi.com> writes:
> I am trying to build 8.2.5, forcing to a 32 bit build on a 64 bit
> system. I have set CFLAGS=-m32,

setarch might help ...
        regards, tom lane


Re: Error building 32 bit on 64 bit linux system

От
Zoltan Boszormenyi
Дата:
Doug Knight írta:
> All,
> I am trying to build 8.2.5, forcing to a 32 bit build on a 64 bit
> system. I have set CFLAGS=-m32, and I run the configure and make/make
> install as follows:
>
> setarch i386 ./configure
> setarch i386 make
> setarch i386 make install
>
> However, I get the following error (using timezone for example):
>
> $ make
> gcc -m32 -Wall -Wmissing-prototypes -Wpointer-arith -Winline
> -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing
> -I../../src/include -D_GNU_SOURCE   -c -o localtime.o localtime.c
> gcc -m32 -Wall -Wmissing-prototypes -Wpointer-arith -Winline
> -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing
> -I../../src/include -D_GNU_SOURCE   -c -o strftime.o strftime.c
> gcc -m32 -Wall -Wmissing-prototypes -Wpointer-arith -Winline
> -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing
> -I../../src/include -D_GNU_SOURCE   -c -o pgtz.o pgtz.c
> /usr/bin/ld -r -o SUBSYS.o localtime.o strftime.o pgtz.o
> /usr/bin/ld: Relocatable linking with relocations from format
> elf32-i386 (localtime.o) to format elf64-x86-64 (SUBSYS.o) is not
> supported
> make: *** [SUBSYS.o] Error 1
>
> Funny thing is, there is no SUBSYS.o in my current directory. If I
> build from the top, I see this same error in each dirctory/makefile
> where a SUBSYS.o is linked with. If I search my build tree after a
> top-down build, I do not see any SUBSYS.O files at all. Where is this
> SUBSYS.o getting created, and why isn't it being created as a 32 bit
> file instead of 64 bit?

This problem is solved by using

export CC="gcc -m32"
export LD="ld -melf_i386"

before doing

setarch i386 (./configure ... ; make)

Best regards,
Zoltán Böszörményi

--
----------------------------------
Zoltán Böszörményi
Cybertec Schönig & Schönig GmbH
http://www.postgresql.at/