Error building 32 bit on 64 bit linux system
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
I'm not sure, but maybe linker also needs a switch to make 32bit output.
Zdenek
Doug Knight napsal(a):
Show quoted text
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 installHowever, 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 1Funny 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
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 installHowever, 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 1Funny 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
Thanks Andrew, I missed the little -o in front of the SUBSYS.o. I did
find that if I did "export LDEMULATION=elf_i386" I was able to link
successfully. Now I just need to tell configure that I want to use the
32 bit perl libs, not the 64 bit ones it keeps finding by using:
$PERL -MConfig -e 'print $Config{archlibexp}'
Both 32 and 64 bit libraries 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 CentOS VM I have setup.
Doug
On Mon, 2008-02-18 at 09:48 -0500, Andrew Dunstan wrote:
Show quoted text
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 installHowever, 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 1Funny 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
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
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 installHowever, 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 1Funny 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/