475 Stimmen

Wie kann man feststellen, ob ein bestimmtes Linux 32 Bit oder 64 Bit ist?

Wenn ich tippe uname -a gibt es die folgende Ausgabe.

Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 i686 i686 i386 GNU/Linux

Wie kann ich daraus erkennen, ob es sich um ein 32- oder 64-Bit-Betriebssystem handelt?

Dies ist nützlich beim Schreiben von configure Skripte, zum Beispiel: Für welche Architektur baue ich?

11voto

Reed Hedges Punkte 1583

Ich habe mir Gedanken darüber gemacht, speziell für die Erstellung von Software in Debian (das installierte Debian-System kann eine 32-Bit-Version mit einem 32-Bit-Kernel, Bibliotheken usw. sein, oder eine 64-Bit-Version mit Dingen, die für den 64-Bit- statt für den 32-Bit-Kompatibilitätsmodus kompiliert wurden).

Debian-Pakete selbst müssen natürlich wissen, für welche Architektur sie bestimmt sind, wenn sie das Paket mit all seinen Metadaten, einschließlich der Plattformarchitektur, erstellen, daher gibt es ein Paketierungswerkzeug, das diese Daten für andere Paketierungswerkzeuge und Skripte ausgibt, genannt dpkg-architecture . Er enthält sowohl die Konfiguration, für die er gebaut wird, als auch den aktuellen Host. (Normalerweise sind diese jedoch identisch.) Beispielausgabe auf einem 64-Bit-Rechner:

DEB_BUILD_ARCH=amd64
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_ARCH_CPU=amd64
DEB_BUILD_GNU_CPU=x86_64
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=x86_64-linux-gnu
DEB_HOST_ARCH=amd64
DEB_HOST_ARCH_OS=linux
DEB_HOST_ARCH_CPU=amd64
DEB_HOST_GNU_CPU=x86_64
DEB_HOST_GNU_SYSTEM=linux-gnu
DEB_HOST_GNU_TYPE=x86_64-linux-gnu

Sie können nur eine dieser Variablen ausdrucken oder einen Test gegen ihre Werte mit Befehlszeilenoptionen für dpkg -Architektur.

Ich habe keine Ahnung, wie dpkg-architecture die Architektur ermittelt, aber Sie könnten sich die Dokumentation oder den Quellcode ansehen (dpkg-architecture und ein Großteil des dpkg-Systems im Allgemeinen sind Perl).

11voto

scotty Punkte 1
#include <stdio.h>

int main(void)
{
    printf("%d\n", __WORDSIZE);
    return 0;
}

10voto

Denis R. Punkte 818

Wenn Sie ein 64-Bit-Betriebssystem anstelle von i686 haben, müssen Sie x86_64 o ia64 in der Ausgabe von uname -a . Wenn Sie keine dieser beiden Zeichenfolgen haben, haben Sie ein 32-Bit-Betriebssystem (dies bedeutet nicht, dass Ihre CPU nicht 64-Bit ist).

6voto

ysdx Punkte 8191

Heutzutage kann ein System mehrstufig sein, so dass es ohnehin keinen Sinn macht. Vielleicht möchten Sie das Standardziel des Compilers herausfinden:

$ cc -v 2>&1 | grep ^Target
Target: x86\_64-pc-linux-gn

Sie können versuchen, ein "Hallo Welt" zu kompilieren:

$ echo 'int main() { return 0; }' | cc -x c - -o foo
$ file foo
foo: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID\[sha1\]=b114e029a08abfb3c98db93d3dcdb7435b5bba0c, not stripped

6voto

Louis Gerbarg Punkte 43196

Dieses System ist 32bit. iX86 in uname bedeutet, dass es sich um eine 32-Bit-Architektur handelt. Wäre es eine 64-Bit-Architektur, würde sie

Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 x86_64 i686 x86_64 x86_64 GNU/Linux

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X