19.3 Software Compilation on Biarch Platforms
To develop binaries for the other architecture on a biarch architecture, the
respective libraries for the second architecture must additionally be
installed. These packages are called rpmname-32bit or
rpmname-x86 (for ia64) if the
second architecture is a 32-bit architecture or rpmname-64bit if the second architecture is
a 64-bit architecture. You also need the respective headers and
libraries from the rpmname-devel
packages and the development libraries for the second architecture from
rpmname-devel-32bit or rpmname-devel-64bit.
For example, to compile a program that uses libaio on a
system whose second architecture is a 32-bit architecture (x86_64
or s390x), you need the following RPMs:
- libaio-32bit
-
32-bit runtime package
- libaio-devel-32bit
-
Headers and libraries for 32-bit development
- libaio
-
64-bit runtime package
- libaio-devel
-
64-bit development headers and libraries
Most open source programs use an
autoconf-based program configuration.
To use autoconf for configuring a
program for the second architecture, overwrite the normal compiler
and linker settings of autoconf by
running the configure script with
additional environment variables.
The following example refers to an x86_64 system with x86 as the second
architecture. Examples for s390x with s390 as the second
architecture or ppc64 with ppc as the second architecture would be similar.
This example does not apply to ia64 where you do not build 32-bit
packages.
-
Use the 32-bit compiler:
CC="gcc -m32"
-
Instruct the linker to process 32-bit objects (always use gcc as the linker
front-end):
LD="gcc -m32"
-
Set the assembler to generate 32-bit objects:
AS="gcc -c -m32"
-
Determine that the libraries for libtool and so
on come from /usr/lib:
LDFLAGS="-L/usr/lib"
-
Determine that the libraries are stored in the
lib subdirectory:
--libdir=/usr/lib
-
Determine that the 32-bit X libraries are used:
--x-libraries=/usr/X11R6/lib/
Not all of these variables are needed for every program.
Adapt them to the respective program.
An example configure call to compile a native 32-bit
application on x86_64, ppc64, or s390x
could appear as follows:
CC="gcc -m32" \
LDFLAGS="-L/usr/lib;" \
.configure \
--prefix=/usr \
--libdir=/usr/lib
make
make install