Am Mittwoch, 13. Juni 2001 19:56 schrieb Guenter Penk:
Ich habe 3, eher grundsätzliche, Fragen an Euch, ich ich nicht mit den Handbüchern beantworten konnte. Da sie eng zusammengehören, möchte ich nicht für jedes einen Thread aufmachen.
1. Warum muss man Programme für Linux extra kompilieren?
Jeder Prozessor hat einen eigenen Sprachschatz an Maschinenbefehlen, da aber kaum jemand in dieser Maschinensprache programmiert (hab das früher mal auf dem C128 mal gemacht), steckt ein Wandler dazwischen, der das was der Programmierer schreibt (Source Code) in für den Prozessor verständliche Befehle umsetzt (Binary). Bei Assembler (leichter lesbarer Maschinencode mit Macromöglichkeiten) ist es der Assembler, bei Hochsprachen der Compiler und bei Scriptsprachen der Interpreter. Abgesehen von der dritten Gattung geschieht diese Wandlung einmalig, unter Linux meist mit einem "./configure", "make" und "make install" bis letztendlich ausführbare Software vorliegt. Bei Scriptsprachen erfolgt die Umwandlung während der Ausführung, Befehl für Befehl (mit entsprechenden Geschwindigkeitsnachteilen). Dann gibt es noch "Zwittersprachen", die sich beider Techniken bedienen, wie z.B. Java. Das ist so auch auf anderen Systemen (Windows, MacOS, Amiga, ...) und nicht Linuxspezifisch. Das Besondere an Linux ist nur, dass es ein OpenSource System ist, das bedeutet, dass die Programmme nicht nur in der ausführbaren Version, sondern auch im Source Code zur Verfügung stehen. Wer will kann sie seinen Bedürfnissen anpassen, Fehler bereinigen, neue Funktionen hinzufügen usw. und letztendlich natürlich auch einfach nur übersetzen um Ausführbare Programme zu erhalten. In der regel stehen die ausführbaren Varianten aber zumindestens für IA32-Prozessoren (x86) zur Verfügung. Linux läuft aber nicht nur auf Intel/AMD Kisten, daher ist es kaum einem Programmierer möglich, Ausführbare Varianten für alle möglichen Prozessoren zu erstellen (Sparc, PPC, Mips, Alpha, 68k, ...), allein deshalb ist es immer gut, den Source Code zu haben und selbst übersetzen zu können. Schon mal versucht aktuelle Software für die PPC-Version von Windows NT zu finden?
2. Gibt es einen Unterschied, etwa in Programmschnelligkeit, Kompatibilität o.ä. zwischen der Kompilierung von *.tar.gz-Archiven und der Verwendung von vorkompilierten RPM-Paketen (ausser der einfacheren Installation und der unterschiedlichen Paketgrößen)
Du hast in jedem Fall den Vorteil, dass das Programm genau auf Deinen Rechner hin zugeschnitten ist, also für die Libraries compiliert wurde, die auch auf Deinem System installiert sind, das kann Probleme vermeiden helfen. Insbesondere die libc/glibc verursacht da Probleme, so wird ein unter SuSE 7.1 compiliertes Programm kaum unter SuSE 6.4 und sicher nicht unter 5.x laufen. Vorteile kann es auch durch individuelle Konfiguration geben. Ein "./configure --help" fördert oft recht interessante Möglichkeiten zu Tage um etwa gewünschte Funktionen zu aktivieren und nicht benötigte zu deaktivieren. Das kann Vorteile in der Ausführungsgeschwindigkeit haben. Geschwindigkeitsvorteile können auch durch spezielle Compiler-Optionen (Pentium optimiert, Atlon optimiert, ...) bieten. Distributoren sind natürlich interessiert, ein Programm auf möglichst vielen Rechnern problemlos laufen lassen zu köennen, weshalb Programme (im IA32-Umfeld) meist i80386 kompatibel übersetzt wurden.
3. Ist es möglich/macht es Sinn, dem Compiler andere Optimierungsstufen zuzuweisen (z.B. für PII oder PIII) oder werden Programme dadurch buggy?
Jede Compiliereinstellung ruft Änderungen am erzeugten Programmcode hervor, es sind mit Sicherheit nicht alle Kombinationen mit allen denkbaren Source Code Varianten ausgetestet, von daher ist es nicht auszuschliessen, dass man sich einen Fehler einfängt. -- Machs gut | http://www.iiv.de/schwinde/buerger/tremmel/ | http://www.knightsoft.de Manfred | http://www.knightsoft-net.de