PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Compilien mit Prozessorangabe


floe-de
27.04.02, 18:06
Hallo,

ich würde gern wissen welchen Parameter man angeben muß um ein Programm auf einen bestimmten Prozessor hin zu compilieren ?

und

muß man den Parameter schon bei ./configure eingeben oder bei make ?

floe-de
28.04.02, 08:38
Nochmal ich vielleicht hab ich mich zu umständlich ausgedrückt...

Es gibt doch Pakete meist rpm wo immer i386 bzw. i568 oder i686 hintersteht.

Diese Pakete wurden speziell auf den entsprechenden Prozessor compiliert ich will nun wissen welchen Parameter man angeben muß um das zu erreichen ?

Will doch nur ein bisschen Geschwindigkeit rausholen :confused:


P.S: Falls einer weis was für ein Parameter ich für Dual Prozessoren angeben muß wäre ich auch sehr dankbar.

dauni
28.04.02, 10:13
also wenns mich jetzt nicht ganz täuscht, muß du schon die jeweilige maschine haben um das ganze für selbige anzupassen......

Ulli Ivens
28.04.02, 16:00
Quatsch... du kannst sogar auf nem Intel für PowePC Compilieren.... (nennt man Cross Compiling). Wie sollen die Distributoren denn ihr Linux compilieren und Pakete bauen ?? Das machen die garantiert nicht auf ner Workstation sondern auf nem fetten Server ( Mainframe) , und der hat bestimmt nix mit der PC Architektur zu tun :D

Wenn du auf nem 386 was für nen 686 compilieren willst musst du einfach die CFLAGS und die CXXFLAGS passend setzen. z.B

export CFLAGS="-O3 -march=i686"
und export CXXFLAGS=$CFKLAGS

Das kannst du natürlich auch auf nem 686 für 'nen 386 machen ;)

In der Regel ermittelt das configure Script aber deinen Prozessor Typ und setzt die Flags entsprechend. Falls das nicht der Fall ist, kannst du es so machen wie beschrieben, oder du gibst es beim ./configure Aufruf mit an (./configure --help für Infos)

Catonga
18.04.03, 03:45
Original geschrieben von Ulli Ivens
Quatsch... du kannst sogar auf nem Intel für PowePC Compilieren.... (nennt man Cross Compiling). Wie sollen die Distributoren denn ihr Linux compilieren und Pakete bauen ?? Das machen die garantiert nicht auf ner Workstation sondern auf nem fetten Server ( Mainframe) , und der hat bestimmt nix mit der PC Architektur zu tun :D


Das versuche ich gerade auf einer Sun Ultra Sparc Workstation.

Ich habe hier ein kleine C-Quellcodedatei namens "test.c" und möchte die auf der Sun Workstation so compilieren, daß das compilierte Programm dann hinterher auf meinem Athlon läuft.

Eingeben habe ich auf der Sun Maschine folgendes:
$ gcc -O2 -mcpu=i686 -static test.c -o test


Aber dann erhalte ich folgende Fehlermeldung:
cc1: bad value (i686) for -mcpu= switch


Wenn ich anstatt -mcpu -march verwende erhalte ich folgende Fehlermeldung:
$ gcc -O2 -march=i686 -static test.c -o test.bin
cc1: invalid option `arch=i686'


Was mache ich falsch?
Die auf der Sun verwendete gcc version ist 3.2.2


Außerdem würde ich noch gerne wissen wie man nachprüfen kann ob ein
bestimmtes Programm nun für einen i386 oder einen Pentium Pro optimiert wurde,
weil wenn ich ein Programm wie oben im Beispiel angegeben für einen i686 compiliere und
dann hinterher das Programm mit
$ file programmname
prüfe, dann zeigt mir file immer noch an, daß es für einen Intel 80386 ist.
Wie bekomme ich jetzt aber heraus für welche CPU dieses Programm compiliert wurde,
also mit welchem Programm geht das?
File kann das ja leider offentsichtlich nicht
sondern zeigt wohl nur die grundlegende Architektur (i386) an.

Catonga
18.04.03, 04:39
Ich glaube ich habe es rausbekommen.

Die -m Option bestimmt nur die Optimierungen für die ausgewählte Architektur und den CPU Type in der selben Architekturfamilie.

Die Architektur selbst, also powerpc, i386, Amiga oder Sparc wird nicht mit der Option -m
sondern mit der Option -b bestimmt.


Siehe hier:
http://gcc.gnu.org/onlinedocs/gcc-3.2.2/gcc/Target-Options.html#Target%20Options


Leider kann ich das jetzt nicht sofort ausprobieren, weil
dem Sun Rechner die i386 Crosscompiler Erweiterungen fehlen.
Kann man selbst im
gcc-lib/
Verzeichnis nachschauen für welche Architekturen man compilieren kann.

Auf meiner Slackware gibt es z.b. im
/usr/lib/gcc-lib/
Verzeichnis nur die Intel Architektur, also "i386-slackware-linux"
wenn ich für einen PowerPC oder sonstiges ein Programm erstellen möchte, dann müßte
ich wohl noch ein paar Dateien installieren und ein powerPC Verzeichnis (oder ähnliche Namesgebung) im /usr/lib/gcc-lib/ vorfinden.

Catonga
18.04.03, 04:44
Jetzt weiß ich nur noch nicht mit welchem Programm man herausfinden kann
für welchen CPU Typ (bei gleicher Architekurfamilie) ein Programm compiliert/optimiert wurde.

sticky bit
18.04.03, 14:25
Hmm, ich denke man muss sich vorher den Compiler und die Binutils als Crosscompilier Umgebung einrichten. Dazu muss man beim Übersetzen der Quellen dem ./configure den Parameter --target=$ZIELPLATTFORM mit geben und für entsprechend alle gewünschten Plattformen übersetzten.
Dann erhält man für die einzelnen Plattformen je die Tools die benötigt werden.
So siehts zumindest aus...