Error building 32 bit on 64 bit linux system

Started by Doug Knightalmost 18 years ago6 messages
#1Doug Knight
dknight@wsi.com

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

#2Zdenek Kotala
Zdenek.Kotala@Sun.COM
In reply to: Doug Knight (#1)
Re: Error building 32 bit on 64 bit linux system

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

#3Andrew Dunstan
andrew@dunslane.net
In reply to: Doug Knight (#1)
Re: Error building 32 bit on 64 bit linux system

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

#4Doug Knight
dknight@wsi.com
In reply to: Andrew Dunstan (#3)
Re: Error building 32 bit on 64 bit linux system

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

#5Tom Lane
tgl@sss.pgh.pa.us
In reply to: Doug Knight (#1)
Re: Error building 32 bit on 64 bit linux system

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

#6Zoltan Boszormenyi
zb@cybertec.at
In reply to: Doug Knight (#1)
Re: Error building 32 bit on 64 bit linux system

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/