Chapitre 6. Applications 32 bits et 64 bits dans un environnement système 64 bits

Table des matières

6.1. Support d'exécution
6.2. Développement logiciel
6.3. Compilation logicielle sur plateformes biarch
6.4. Spécifications du noyau

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.

6.1. Support d'exécution

[Important]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).

6.2. Développement logiciel

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.

6.3. Compilation logicielle sur plateformes biarch

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.

  1. Utiliser le compilateur 32 bits :

    CC="gcc -m32"
  2. Instruct the linker to process 32-bit objects (always use gcc as the linker front-end):

    LD="gcc -m32"
  3. Paramétrer l'assembleur pour générer des objets 32 bits :

    AS="gcc -c -m32"
  4. Spécifier les options du linker, comme par exemple l'emplacement des bibliothèques 32 bits :

    LDFLAGS="-L/usr/lib"
  5. Specify the location for the 32-bit object code libraries:

    --libdir=/usr/lib
  6. 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

6.4. Spécifications du noyau

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.

[Tip]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.


openSUSE Reference 12.3