Table des matières
openSUSE® is available for 64-bit platforms. This does not necessarily mean that all the applications included have already been ported to 64-bit platforms. openSUSE supports the use of 32-bit applications in a 64-bit system environment. This chapter offers a brief overview of how this support is implemented on 64-bit openSUSE platforms. It explains how 32-bit applications are executed (runtime support) and how 32-bit applications should be compiled to enable them to run both in 32-bit and 64-bit system environments. Additionally, find information about the kernel API and an explanation of how 32-bit applications can run under a 64-bit kernel.
openSUSE for the 64-bit platforms amd64 and Intel 64 is designed so that existing 32-bit applications run in the 64-bit environment « out-of-the-box. » This support means that you can continue to use your preferred 32-bit applications without waiting for a corresponding 64-bit port to become available.
![]() | Conflit entre versions d'application |
---|---|
Si une application est disponible pour les environnements 32 bits et 64 bits, l'installation parallèle des deux versions entrainera certainement des problèmes. Dans un tel cas, choisissez l'une des deux versions et installer uniquement celle-ci. PAM (Pluggable Authentication Modules) est une exception à cette règle. openSUSE utilise PAM dans le processus d'authentification en tant que couche intermédiaire entre l'utilisateur et l'application. Sur un système d'exploitation 64 bits qui gère aussi des applications 32 bits, il est nécessaire d'installer les deux versions d'un module PAM. |
Pour être correctement exécutée, chaque application nécessite une série de bibliothèques. Malheureusement, les noms des versions 32 bits et 64 bits de ces bibliothèques sont identiques. Elles doivent être différenciées les unes des autres d'une autre façon.
Pour conserver la compatibilité avec la version 32 bits, les bibliothèques sont stockées au même endroit que dans l'environnement 32 bits. La version 32 bits de libc.so.6
se trouve dans /lib/libc.so.6
dans les environnements 32 bits et 64 bits.
Toutes les bibliothèques 64 bits et les fichiers objets sont situés dans des répertoires appelés lib64
. Les fichiers objets 64 bits que vous vous attendriez normalement à trouver dans /lib
et /usr/lib
se trouvent maintenant dans /lib64
et /usr/lib64
. Cela signifie qu'il y a de la place pour les bibliothèques 32 bits dans /lib
et /usr/lib
, le nom de fichier pour les deux versions peut donc rester inchangé.
Subdirectories of 32-bit /lib
directories which
contain data content that does not depend on the word size are not moved.
This scheme conforms to LSB (Linux Standards Base) and FHS (File System
Hierarchy Standard).
A biarch development tool chain allows generation of 32-bit and 64-bit
objects. The default is to compile 64-bit objects. It is possible to
generate 32-bit objects by using special flags. For GCC, this special
flag is -m32
.
Tous les fichiers d'en-tête doivent être écrits dans une forme indépendante de l'architecture. Les bibliothèques 32 bits et 64 bits installées doivent avoir une API (Application Programming Interface) qui corresponde avec les fichiers d'en-tête installés. L'environnement openSUSE normal est conçu selon ce principe. Dans le cas de bibliothèques mises à jour manuellement, résolvez ces problèmes vous-même.
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
. 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
.
La plupart des programmes open source utilisent une configuration de programme basée sur autoconf. Pour utiliser autoconf pour configurer un programme pour la seconde architecture, écrasez les paramètres normaux du compilateur et du linker de autoconf en exécutant le script configure avec les variables d'environnement additionnelles.
L'exemple suivant fait référence à un système x86_64 avec x86 comme seconde architecture.
Utiliser le compilateur 32 bits :
CC="gcc -m32"
Instruct the linker to process 32-bit objects (always use gcc as the linker front-end):
LD="gcc -m32"
Paramétrer l'assembleur pour générer des objets 32 bits :
AS="gcc -c -m32"
Spécifier les options du linker, comme par exemple l'emplacement des bibliothèques 32 bits :
LDFLAGS="-L/usr/lib"
Specify the location for the 32-bit object code libraries:
--libdir=/usr/lib
Spécifier l'emplacement pour les bibliothèques X 32 bits :
--x-libraries=/usr/lib
Ces variables ne sont pas toutes nécessaires pour chaque programme. Adaptez-les au programme concerné.
CC="gcc -m32" LDFLAGS="-L/usr/lib;" ./configure --prefix=/usr --libdir=/usr/lib --x-libraries=/usr/lib make make install
Les noyaux 64 bits pour x86_64 offrent une ABI noyau (Application Binary Interface) 64 bits et 32 bits. Cette dernière est identique à l'ABI correspondante au noyau 32 bits. Cela signifie que l'application 32 bits peut communiquer avec le noyau 64 bits de la même façon qu'avec le noyau 32 bits.
The 32-bit emulation of system calls for a 64-bit kernel does not support all the APIs used by system programs. This depends on the platform. For this reason, a small number of applications, like lspci, must be compiled.
Un noyau 64 bits ne peut charger que des modules noyau 64 bits qui ont été spécialement compilés pour ce noyau. Il n'est pas possible d'utiliser des modules noyau 32 bits.
![]() | Kernel-loadable Modules |
---|---|
Some applications require separate kernel-loadable modules. If you intend to use such a 32-bit application in a 64-bit system environment, contact the provider of this application and SUSE to make sure that the 64-bit version of the kernel-loadable module and the 32-bit compiled version of the kernel API are available for this module. |