Voici ce qui se passe lorsque j'exécute mon programme print-size-of-pointer sur ma Sun Fire sous Solaris:
(Il y a deux versions: compilé en 32-bit et compilé en 64-bit):
Résultat sur fire (Sun Fire 64-bit):
Version du kernel:
[pbn@fire] /export/home/pbn/Documents/print-sizeof-pointer>uname -a
SunOS fire 5.10 Generic_118833-33 sun4u sparc SUNW,UltraAX-i2
Sommes-nous en 64-bit ?
[pbn@fire] /export/home/pbn/Documents/print-sizeof-pointer>isainfo -b
64
Oui, nous sommes en 64-bit
Voyons les fichiers
[pbn@fire] /export/home/pbn/Documents/print-sizeof-pointer>ls -l
total 142
-rwxr-xr-x 1 pbn users 6587 Jun 1 20:00 print-sizeof-pointer-linux-32bit.bin
-rwxr-xr-x 1 pbn users 9415 Jun 1 20:00 print-sizeof-pointer-linux-64bit.bin
-rwxr-xr-x 1 pbn users 53640 Jun 1 20:00 print-sizeof-pointer-macosx.bin
-rw-r--r-- 1 pbn users 561 Jun 1 20:00 print-sizeof-pointer.c
Je compile mon programme en 32-bit
[pbn@fire] /export/home/pbn/Documents/print-sizeof-pointer>gcc -o print-sizeof-pointer-solaris-32bit.bin -m32 print-sizeof-pointer.c
Je compile mon programme en 64-bit
[pbn@fire] /export/home/pbn/Documents/print-sizeof-pointer>gcc -o print-sizeof-pointer-solaris-64bit.bin -m64 print-sizeof-pointer.c
Voyons de quel type d'exécutable il s'agit:
[pbn@fire] /export/home/pbn/Documents/print-sizeof-pointer>file *solaris*
print-sizeof-pointer-solaris-32bit.bin: ELF 32-bit MSB executable SPARC Version 1, dynamically linked, not stripped, no debugging information available
print-sizeof-pointer-solaris-64bit.bin: ELF 64-bit MSB executable SPARCV9 Version 1, dynamically linked, not stripped, no debugging information available
J'exécute la version 32-bit de mon programme:
[pbn@fire] /export/home/pbn/Documents/print-sizeof-pointer>./print-sizeof-pointer-solaris-32bit.bin
print-sizeof-pointer.c
If the result is 8, this machine is a 64-bit system.
If the result is 4, this machine is a 32-bit system.
Result: 4
J'exécute la version 64-bit de mon programme:
[pbn@fire] /export/home/pbn/Documents/print-sizeof-pointer>./print-sizeof-pointer-solaris-64bit.bin
print-sizeof-pointer.c
If the result is 8, this machine is a 64-bit system.
If the result is 4, this machine is a 32-bit system.
Result: 8
[pbn@fire] /export/home/pbn/Documents/print-sizeof-pointer>
En bref sous Solaris sur une machine 64-bit avec un OS 64-bit, je peux à la fois exécuter les exécutables 32-bit et 64-bit. Et en fait, les exécutables 32-bit ont leurs adresses en 32-bit, les exécutables 64-bit ont leurs adresses en 64-bit.
dimanche 21 juin 2009
print-size-of-pointer: exécution sous Mac OS X
Voici ce qui se passe lorsque j'exécute mon programme print-size-of-pointer sous MacOSX:
Résultat sur albert (iMac Intel Core 2 Duo à 2 GHz, Mac OS X 10.5 Intel):
Quel kernel avons-nous ?
[pbn@albert] /Users/pbn>uname -a
Darwin albert 9.7.0 Darwin Kernel Version 9.7.0: Tue Mar 31 22:52:17 PDT 2009; root:xnu-1228.12.14~1/RELEASE_I386 i386
En particulier, quelle est l'architecture ?
[pbn@albert] /Users/pbn>uname -m
i386
Le CPU est-il 64-bit ?
[pbn@albert] /Users/pbn>sysctl hw.cpu64bit_capable
hw.cpu64bit_capable: 1
Oui, le CPU est 64-bit
Voyons les fichiers
[pbn@albert] /Users/pbn/Documents/other/print-sizeof-pointer>ls
print-sizeof-pointer-linux-32bit.bin print-sizeof-pointer-macosx.bin
print-sizeof-pointer-linux-64bit.bin print-sizeof-pointer.c
[pbn@albert] /Users/pbn/Documents/other/print-sizeof-pointer>ls -l
total 160
-rw-r--r-- 1 pbn staff 6587 1 jui 20:00 print-sizeof-pointer-linux-32bit.bin
-rw-r--r-- 1 pbn staff 9415 1 jui 20:00 print-sizeof-pointer-linux-64bit.bin
-rwxr-xr-x 1 pbn staff 53640 1 jui 20:00 print-sizeof-pointer-macosx.bin
-rw-r--r-- 1 pbn staff 561 1 jui 20:00 print-sizeof-pointer.c
Voyons de quel type d'exécutable il s'agit: c'est un "universal binary" qui contient quatre exécutables pour quatre architectures différentes
[pbn@albert] /Users/pbn/Documents/other/print-sizeof-pointer>file print-sizeof-pointermacosx.bin
print-sizeof-pointer-macosx.bin: Mach-O universal binary with 4 architectures
print-sizeof-pointer-macosx.bin (for architecture i386): Mach-O executable i386
print-sizeof-pointer-macosx.bin (for architecture x86_64): Mach-O 64-bit executable x86_64
print-sizeof-pointer-macosx.bin (for architecture ppc7400): Mach-O executable ppc
print-sizeof-pointer-macosx.bin (for architecture ppc64): Mach-O 64-bit executable ppc64
J'exécute mon programme:
[pbn@albert] /Users/pbn/Documents/other/print-sizeof-pointer>./print-sizeof-pointer-macosx.bin
print-sizeof-pointer.c
If the result is 8, this machine is a 64-bit system.
If the result is 4, this machine is a 32-bit system.
Result: 8
[pbn@albert] /Users/pbn/Documents/other/print-sizeof-pointer>
En bref le cas de Mac OS X 10.5 "Léopard" est un peu particulier: sur une machine 64-bit sous Mac OS X 10.5 "Léopard":
Résultat sur albert (iMac Intel Core 2 Duo à 2 GHz, Mac OS X 10.5 Intel):
Quel kernel avons-nous ?
[pbn@albert] /Users/pbn>uname -a
Darwin albert 9.7.0 Darwin Kernel Version 9.7.0: Tue Mar 31 22:52:17 PDT 2009; root:xnu-1228.12.14~1/RELEASE_I386 i386
En particulier, quelle est l'architecture ?
[pbn@albert] /Users/pbn>uname -m
i386
Le CPU est-il 64-bit ?
[pbn@albert] /Users/pbn>sysctl hw.cpu64bit_capable
hw.cpu64bit_capable: 1
Oui, le CPU est 64-bit
Voyons les fichiers
[pbn@albert] /Users/pbn/Documents/other/print-sizeof-pointer>ls
print-sizeof-pointer-linux-32bit.bin print-sizeof-pointer-macosx.bin
print-sizeof-pointer-linux-64bit.bin print-sizeof-pointer.c
[pbn@albert] /Users/pbn/Documents/other/print-sizeof-pointer>ls -l
total 160
-rw-r--r-- 1 pbn staff 6587 1 jui 20:00 print-sizeof-pointer-linux-32bit.bin
-rw-r--r-- 1 pbn staff 9415 1 jui 20:00 print-sizeof-pointer-linux-64bit.bin
-rwxr-xr-x 1 pbn staff 53640 1 jui 20:00 print-sizeof-pointer-macosx.bin
-rw-r--r-- 1 pbn staff 561 1 jui 20:00 print-sizeof-pointer.c
Voyons de quel type d'exécutable il s'agit: c'est un "universal binary" qui contient quatre exécutables pour quatre architectures différentes
[pbn@albert] /Users/pbn/Documents/other/print-sizeof-pointer>file print-sizeof-pointermacosx.bin
print-sizeof-pointer-macosx.bin: Mach-O universal binary with 4 architectures
print-sizeof-pointer-macosx.bin (for architecture i386): Mach-O executable i386
print-sizeof-pointer-macosx.bin (for architecture x86_64): Mach-O 64-bit executable x86_64
print-sizeof-pointer-macosx.bin (for architecture ppc7400): Mach-O executable ppc
print-sizeof-pointer-macosx.bin (for architecture ppc64): Mach-O 64-bit executable ppc64
J'exécute mon programme:
[pbn@albert] /Users/pbn/Documents/other/print-sizeof-pointer>./print-sizeof-pointer-macosx.bin
print-sizeof-pointer.c
If the result is 8, this machine is a 64-bit system.
If the result is 4, this machine is a 32-bit system.
Result: 8
[pbn@albert] /Users/pbn/Documents/other/print-sizeof-pointer>
En bref le cas de Mac OS X 10.5 "Léopard" est un peu particulier: sur une machine 64-bit sous Mac OS X 10.5 "Léopard":
- l'operating system est 64-bit
- l'API (Cocoa) est 64-bit et/ou 32-bit
- le kernel est 32-bit
- les fichiers "Universal Binaries" peuvent contenir les exécutables pour plusieurs architectures.
Libellés :
64-bit,
fat binary,
Mac OS X,
print-sizeof-pointer,
Universal Binary
samedi 20 juin 2009
print-size-of-pointer: exécution sous Linux
Voici ce qui se passe lorsque j'exécute mon programme print-size-of-pointer sous Linux:
(Il y a deux versions: compilé en 32-bit et compilé en 64-bit):
Résultat sur cobra (Intel(R) Core(TM)2 Quad CPU Q9400 @ 2.66GHz, Debian GNU/Linux "squeeze" 64-bit):
[pbn@cobra] /home/pbn>cd other/print-sizeof-pointer/
Voyons les fichiers
[pbn@cobra] /home/pbn>ls -l
total 92
-rwxr-xr-x 1 pibe pibe 561 jun 1 20:00 print-sizeof-pointer.c
-rwxr-xr-x 1 pibe pibe 6587 jun 1 20:00 print-sizeof-pointer-linux-32bit.bin
-rwxr-xr-x 1 pibe pibe 9415 jun 1 20:00 print-sizeof-pointer-linux-64bit.bin
-rwxr-xr-x 1 pibe pibe 53640 jun 1 20:00 print-sizeof-pointer-macosx.bin
Voyons de quel type d'exécutable il s'agit, c'est du Linux ELF 32-bit
[pbn@cobra] /home/pbn>file print-sizeof-pointer-linux-32bit.bin
print-sizeof-pointer-linux-32bit.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
Voyons de quel type d'exécutable il s'agit, c'est du Linux ELF 64-bit
[pbn@cobra] /home/pbn>file print-sizeof-pointer-linux-64bit.bin
print-sizeof-pointer-linux-64bit.bin: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
Voyons la version du kernel:
[pbn@cobra] /home/pbn>uname -a
Linux cobra 2.6.26-2-amd64 #1 SMP Fri Mar 27 04:02:59 UTC 2009 x86_64 GNU/Linux
Voyons le "type de machine" du kernel:
[pbn@cobra] /home/pbn>uname -m
x86_64
Demandons à dpkg sur quelle architecture nous sommes:
[pbn@cobra] /home/pbn>dpkg --print-architecture
amd64
J'exécute la version 32-bit de mon programme:
[pbn@cobra] /home/pbn>./print-sizeof-pointer-linux-32bit.bin
print-sizeof-pointer.c
If the result is 8, this machine is a 64-bit system.
If the result is 4, this machine is a 32-bit system.
Result: 4
J'exécute la version 64-bit de mon programme:
[pbn@cobra] /home/pbn>./print-sizeof-pointer-linux-64bit.bin
print-sizeof-pointer.c
If the result is 8, this machine is a 64-bit system.
If the result is 4, this machine is a 32-bit system.
Result: 8
[pbn@cobra] /home/pbn>
En bref sous Linux sur une machine 64-bit avec un OS 64-bit, je peux à la fois exécuter les exécutables 32-bit et 64-bit. Et en fait, les exécutables 32-bit ont leurs adresses en 32-bit, les exécutables 64-bit ont leurs adresses en 64-bit.
(Il y a deux versions: compilé en 32-bit et compilé en 64-bit):
Résultat sur cobra (Intel(R) Core(TM)2 Quad CPU Q9400 @ 2.66GHz, Debian GNU/Linux "squeeze" 64-bit):
[pbn@cobra] /home/pbn>cd other/print-sizeof-pointer/
Voyons les fichiers
[pbn@cobra] /home/pbn>ls -l
total 92
-rwxr-xr-x 1 pibe pibe 561 jun 1 20:00 print-sizeof-pointer.c
-rwxr-xr-x 1 pibe pibe 6587 jun 1 20:00 print-sizeof-pointer-linux-32bit.bin
-rwxr-xr-x 1 pibe pibe 9415 jun 1 20:00 print-sizeof-pointer-linux-64bit.bin
-rwxr-xr-x 1 pibe pibe 53640 jun 1 20:00 print-sizeof-pointer-macosx.bin
Voyons de quel type d'exécutable il s'agit, c'est du Linux ELF 32-bit
[pbn@cobra] /home/pbn>file print-sizeof-pointer-linux-32bit.bin
print-sizeof-pointer-linux-32bit.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
Voyons de quel type d'exécutable il s'agit, c'est du Linux ELF 64-bit
[pbn@cobra] /home/pbn>file print-sizeof-pointer-linux-64bit.bin
print-sizeof-pointer-linux-64bit.bin: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
Voyons la version du kernel:
[pbn@cobra] /home/pbn>uname -a
Linux cobra 2.6.26-2-amd64 #1 SMP Fri Mar 27 04:02:59 UTC 2009 x86_64 GNU/Linux
Voyons le "type de machine" du kernel:
[pbn@cobra] /home/pbn>uname -m
x86_64
Demandons à dpkg sur quelle architecture nous sommes:
[pbn@cobra] /home/pbn>dpkg --print-architecture
amd64
J'exécute la version 32-bit de mon programme:
[pbn@cobra] /home/pbn>./print-sizeof-pointer-linux-32bit.bin
print-sizeof-pointer.c
If the result is 8, this machine is a 64-bit system.
If the result is 4, this machine is a 32-bit system.
Result: 4
J'exécute la version 64-bit de mon programme:
[pbn@cobra] /home/pbn>./print-sizeof-pointer-linux-64bit.bin
print-sizeof-pointer.c
If the result is 8, this machine is a 64-bit system.
If the result is 4, this machine is a 32-bit system.
Result: 8
[pbn@cobra] /home/pbn>
En bref sous Linux sur une machine 64-bit avec un OS 64-bit, je peux à la fois exécuter les exécutables 32-bit et 64-bit. Et en fait, les exécutables 32-bit ont leurs adresses en 32-bit, les exécutables 64-bit ont leurs adresses en 64-bit.
Libellés :
64-bit,
Debian GNU/Linux,
Linux,
print-sizeof-pointer
vendredi 12 juin 2009
64 bits ou 32 bits: mon petit programme print-sizeof-pointer.c
Comme je viens de m'offrir un PC de bureau 64-bit, je m'intéresse aux différences entre 64-bit et 32-bit.
J'ai donc écrit un tout petit programme en C qui permet de connaître la taille des pointeurs:
/*
print-sizeof-pointer.c
This little program prints the size of pointers.
On a 64-bit system, pointers are 64-bit (8 bytes),
so this program prints "8".
On a 32-bit system, pointers are 32-bit (4 bytes),
so this program prints "4".
Pierre Bauduin
le 12 juin 2009 */
#include <stdio.h>
int main()
{
printf ("print-sizeof-pointer.c\n");
printf (" If the result is 8, this machine is a 64-bit system.\n");
printf (" If the result is 4, this machine is a 32-bit system.\n");
printf (" Result: %d\n", sizeof(void *));
}
Ce programme permet donc de savoir si l'adressage est 64-bit ou 32-bit.
Si la taille des pointeurs est 8 octets, cela veut dire que l'adressage est 64-bit.
Si la taille des pointeurs est 4 octets, cela veut dire que l'adressage est 32-bit.
Attention, évitons les confusions:
Comment compiler une version 64-bit et/ou 32-bit ?
Si vous avez un système 64-bit, il est possible de dire au compilateur de générer un exécutable 32-bit ou 64-bit.
Cas de Linux, FreeBSD et Solaris:
Pour compiler en 64-bit:
gcc -o print-sizeof-pointer-solaris-64bit.bin -m64 print-sizeof-pointer.c
Pour compiler en 32-bit:
gcc -o print-sizeof-pointer-solaris-32bit.bin -m32 print-sizeof-pointer.c
Cas de Mac OS X: Comme expliqué dans un post précédent, MacOSX permet de générer des "universal binaries" qui contiennent dans le même fichier les exécutables pour une, deux, trois ou même quatre architectures:
gcc -arch i386 -arch ppc -arch ppc64 -arch x86_64 -o print-sizeof-pointer.bin print-sizeof-pointer.c
J'ai donc écrit un tout petit programme en C qui permet de connaître la taille des pointeurs:
/*
print-sizeof-pointer.c
This little program prints the size of pointers.
On a 64-bit system, pointers are 64-bit (8 bytes),
so this program prints "8".
On a 32-bit system, pointers are 32-bit (4 bytes),
so this program prints "4".
Pierre Bauduin
le 12 juin 2009 */
#include <stdio.h>
int main()
{
printf ("print-sizeof-pointer.c\n");
printf (" If the result is 8, this machine is a 64-bit system.\n");
printf (" If the result is 4, this machine is a 32-bit system.\n");
printf (" Result: %d\n", sizeof(void *));
}
Ce programme permet donc de savoir si l'adressage est 64-bit ou 32-bit.
Si la taille des pointeurs est 8 octets, cela veut dire que l'adressage est 64-bit.
Si la taille des pointeurs est 4 octets, cela veut dire que l'adressage est 32-bit.
Attention, évitons les confusions:
- Sur une machine 64-bit on peut faire tourner un OS 64-bit ou un OS 32-bit. Si l'OS est 32-bit, l'adressage est 32-bit.
- Même si la machine et l'OS sont tous les deux 64-bit, cela ne veut pas dire que tous les exécutables doivent être 32-bit ou 64-bit. Par exemple avec Mac OS X 10.5 "Léopard", une grande majorité des exécutables est encore 32-bit.
- Et donc, sur une machine 64-bit avec un OS 64-bit, il est généralement possible de faire tourner à la fois des exécutables 64-bit et des exécutables 32-bit.
- C'est en fait c'est à la compilation (voir ci-dessous comment) qu'il est possible de choisir de générer un exécutable 32-bit ou 64-bit.
Comment compiler une version 64-bit et/ou 32-bit ?
Si vous avez un système 64-bit, il est possible de dire au compilateur de générer un exécutable 32-bit ou 64-bit.
Cas de Linux, FreeBSD et Solaris:
Pour compiler en 64-bit:
gcc -o print-sizeof-pointer-solaris-64bit.bin -m64 print-sizeof-pointer.c
Pour compiler en 32-bit:
gcc -o print-sizeof-pointer-solaris-32bit.bin -m32 print-sizeof-pointer.c
Cas de Mac OS X: Comme expliqué dans un post précédent, MacOSX permet de générer des "universal binaries" qui contiennent dans le même fichier les exécutables pour une, deux, trois ou même quatre architectures:
gcc -arch i386 -arch ppc -arch ppc64 -arch x86_64 -o print-sizeof-pointer.bin print-sizeof-pointer.c
Libellés :
64-bit,
Debian GNU/Linux,
development,
FreeBSD,
Linux,
Mac OS X,
print-sizeof-pointer,
Solaris
lundi 1 juin 2009
Mac OS X 10.5: 64 ou 32 bits ?
A note époque les systèmes d'exploitations existent en 32-bit ou en 64-bit. Comme j'en ai déjà parlé précédemment, Mac OS X 10.5 ("Léopard") est une version combinée qui est à la fois 32-bit et 64-bit. De plus, comme Apple est occupé à passer de l'architecture PowerPC à l'architecture Intel, les exécutables Mac OS X sont (ou en tous cas, peuvent être) multi-architectures. Il s'agit des "Universal Binaries" dont je vous ai déjà parlé.
Sur mon iMac Intel sous Mac OS X 10.5 ("Léopard"), lorsque j'essaye de voir si un exécutable est 32-bit ou 64-bit, PowerPC ou Intel, j'utilise (par exemple) la commande file:
[pbn@albert] /Users/pbn>file /bin/ls
/bin/ls: Mach-O universal binary with 2 architectures
/bin/ls (for architecture i386): Mach-O executable i386
/bin/ls (for architecture ppc7400): Mach-O executable ppc
[pbn@albert] /Users/pbn>
... ceci est un "Universal Binary". Il contient des binaires pour deux architectures: i386, c'est à dire x86 32-bit, et ppc c'est à dire PowerPC 32-bit. C'est un peu décevant: où sont les binaires 64-bit ?
En fait, Mac OS X 10.5 ("Léopard"), peut faire tourner les exécutables 32-bit et 64-bit, mais la majorité des exécutables sont toujours 32-bit.
Sous, Mac OS X 10.5 ("Léopard"), même le kernel est 32-bit:
[pbn@albert] /Users/pbn>uname -a
Darwin albert 9.7.0 Darwin Kernel Version 9.7.0: Tue Mar 31 22:52:17 PDT 2009; root:xnu-1228.12.14~1/RELEASE_I386 i386
[pbn@albert] /Users/pbn>file /mach_kernel
/mach_kernel: Mach-O universal binary with 2 architectures
/mach_kernel (for architecture i386): Mach-O executable i386
/mach_kernel (for architecture ppc): Mach-O executable ppc
Cependant Cocoa, et donc les librairies (ou en bon français les bibliothèques) sont en 32-bit et 64-bit. Un exemple:
[pbn@albert] /Users/pbn>file /usr/lib/libSystem.dylib
/usr/lib/libSystem.dylib: Mach-O universal binary with 4 architectures
/usr/lib/libSystem.dylib (for architecture ppc7400): Mach-O dynamically linked shared library ppc
/usr/lib/libSystem.dylib (for architecture ppc64): Mach-O 64-bit dynamically linked shared library ppc64
/usr/lib/libSystem.dylib (for architecture i386): Mach-O dynamically linked shared library i386
/usr/lib/libSystem.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
[pbn@albert] /Users/pbn>
... voilà qui est plus intéressant. On constate ici que cette librairie est un "Universal Binary" qui contient quatre binaires différents:
En fait la librairie /usr/lib/libSystem.dylib est particulièrement importante sous Mac OS X puisqu'elle contient entre autres toute la librairie glibc.
Il est logique que les librairies existent en 32-bit et 64-bit. En effet, pour pouvoir exécuter des exécutables 32-bit et 64-bit (compilés dynamiquement, en tous cas), il faut avoir quelque part les librairies à la fois en 32-bit et 64-bit.
Sur mon iMac Intel sous Mac OS X 10.5 ("Léopard"), lorsque j'essaye de voir si un exécutable est 32-bit ou 64-bit, PowerPC ou Intel, j'utilise (par exemple) la commande file:
[pbn@albert] /Users/pbn>file /bin/ls
/bin/ls: Mach-O universal binary with 2 architectures
/bin/ls (for architecture i386): Mach-O executable i386
/bin/ls (for architecture ppc7400): Mach-O executable ppc
[pbn@albert] /Users/pbn>
... ceci est un "Universal Binary". Il contient des binaires pour deux architectures: i386, c'est à dire x86 32-bit, et ppc c'est à dire PowerPC 32-bit. C'est un peu décevant: où sont les binaires 64-bit ?
En fait, Mac OS X 10.5 ("Léopard"), peut faire tourner les exécutables 32-bit et 64-bit, mais la majorité des exécutables sont toujours 32-bit.
Sous, Mac OS X 10.5 ("Léopard"), même le kernel est 32-bit:
[pbn@albert] /Users/pbn>uname -a
Darwin albert 9.7.0 Darwin Kernel Version 9.7.0: Tue Mar 31 22:52:17 PDT 2009; root:xnu-1228.12.14~1/RELEASE_I386 i386
[pbn@albert] /Users/pbn>file /mach_kernel
/mach_kernel: Mach-O universal binary with 2 architectures
/mach_kernel (for architecture i386): Mach-O executable i386
/mach_kernel (for architecture ppc): Mach-O executable ppc
Cependant Cocoa, et donc les librairies (ou en bon français les bibliothèques) sont en 32-bit et 64-bit. Un exemple:
[pbn@albert] /Users/pbn>file /usr/lib/libSystem.dylib
/usr/lib/libSystem.dylib: Mach-O universal binary with 4 architectures
/usr/lib/libSystem.dylib (for architecture ppc7400): Mach-O dynamically linked shared library ppc
/usr/lib/libSystem.dylib (for architecture ppc64): Mach-O 64-bit dynamically linked shared library ppc64
/usr/lib/libSystem.dylib (for architecture i386): Mach-O dynamically linked shared library i386
/usr/lib/libSystem.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
[pbn@albert] /Users/pbn>
... voilà qui est plus intéressant. On constate ici que cette librairie est un "Universal Binary" qui contient quatre binaires différents:
32-bit | 64-bit | |
PowerPC | ppc7400 | ppc64 |
Intel | i386 | x86_64 |
En fait la librairie /usr/lib/libSystem.dylib est particulièrement importante sous Mac OS X puisqu'elle contient entre autres toute la librairie glibc.
Il est logique que les librairies existent en 32-bit et 64-bit. En effet, pour pouvoir exécuter des exécutables 32-bit et 64-bit (compilés dynamiquement, en tous cas), il faut avoir quelque part les librairies à la fois en 32-bit et 64-bit.
Libellés :
64-bit,
Apple,
fat binary,
Intel,
Leopard,
Mac OS X,
Universal Binary,
Unix
Inscription à :
Articles (Atom)