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:
32-bit runtime package
Headers and libraries for 32-bit development
64-bit runtime package
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