ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > Open Source Programme übersetzen | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
30.04.2006, 13:45 Uhr DariusBrewka Posts: 899 [Benutzer gesperrt] |
Hallo ich habe mich noch nicht so mit den ganzen autoconf usw. Zeug beschäftigt, wollte aber probieren einigen Linux Tools zu compilieren, dabei habe ich Probleme die ich nicht so ganz nachvollziehen kann. Ich habe unter Linux einen AROS Compiler installiert, d.h. er läuft unter Linux und erzeugt AROS code. Lt. doku zu configure muss ich configure mit ./configure --host=i686-aros aufrufen, er fängt auch an zu übersetzen, nur Leider kommen dann irgendwann Fehlermeldungen, dass er irgendwelchen Test-Programme nicht starten kann, mir erscheint es auch Logisch, denn AROS Code kann Linux nicht nutzen. Eigentlich muß er die TestProgramme doch mit dem Linux Compiler compilieren oder? Er testet z.B. auf size of int und findet richtig heraus, dass es 4 ist, aber dann kommt als nächste Zeile code:checking for growing stack pointer... configure: error: cannot run test programm while cross compiling Die ganzen Configure skripte sind für jemand nicht so leicht zu verstehen dass ich daraus nicht schlau werde was gemacht wird. [ - Antworten - Zitieren - Direktlink - ] |
30.04.2006, 15:54 Uhr Holger Posts: 8116 Nutzer |
Zitat:Was soll das bringen? Die Testprogramme sollen die Zielumgebung testen und nicht die Compilerumgebung. Da hast Du mit nem cross-compiler wenig Chancen. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
30.04.2006, 16:13 Uhr Holger Posts: 8116 Nutzer |
Zitat:Dieses Programm soll offensichtlich überprüfen, ob ein Überschreiten der Stack-Grenze zu einem Abbruch führt, oder der Stack transparent erhöht wird. Wäre doch ziemlich schlecht, wenn man das unter Linux ausführt und aus diesem Ergebnis dann auf Aros schließt, oder? mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
30.04.2006, 16:24 Uhr DariusBrewka Posts: 899 [Benutzer gesperrt] |
Ich weiß jetzt nicht wo das Problem sein soll, aber warum soll man unter Linux mit einem Linux Compiler nicht herausfinden könne, ob AROS nun Beispielweise einen Growing stack pointer hat oder nicht? oder wie die Datenfeldlänge bestimmter Datentypen unter AROS sind. Für mich allsamt keine Argumente die hinderlich daran sind. Ansosnten wären für mich diese ganzen configure + --target + --host Corosscompile Dinge ziemlich nutzlos. [ - Antworten - Zitieren - Direktlink - ] |
01.05.2006, 01:36 Uhr DariusBrewka Posts: 899 [Benutzer gesperrt] |
Hmm, ich vermute mal einfach, dass mir configure sagen will dass das mit einem Crosscompiler nicht funktioniert. Ist auch nicht sonderlich einfach dieses Chinesisch zu verstehen [ - Antworten - Zitieren - Direktlink - ] |
01.05.2006, 08:14 Uhr Mazze Posts: 263 Nutzer |
Ich hänge mich hier mal dran, weil mich das Thema auch interessiert. Das AROS-Build-System kann mit Configure-Paketen umgehen. So sieht das im mmakerfile.src für LBreakout aus: code:%build_with_configure mmake=contrib-games-lbreakout2 nix=yes extraoptions="--with-highscore-path='$$(PROGDIR)data' --with-inst-path='$$(PROGDIR)data' --disable-audio --disable-sdltest --disable-network --with-doc-path='$$(PROGDIR)docs'" prefix=$(CONTRIBDIR)/Games/lbreakout2 nix_dir_layout=no Vermutlich musst Du noch ein paar Test 'disablen'. Die 'nix'-Option schaltet für Funktionen wie 'fopen' Unix-Pfade ein (z.B. ../../test). -- AROS - Because every rose has its dorns. Meine Homepage [ - Antworten - Zitieren - Direktlink - ] |
01.05.2006, 12:07 Uhr Holger Posts: 8116 Nutzer |
Zitat:Ja wie denn? Ich wüßte nur einen Weg: ein Programm schreiben, das mit dem Stack herumspielt und das Ergebnis ausgibt. Was ich stattdessen nicht verstehe, warum C-Programmierer nicht einfach Programme schreiben können, die von so einem Systemdetail unabhängig sind. Dann braucht man auch kein configure, daß einem das Machwerk patcht, um es auf anderen Systemen zum Laufen zu bewegen. Andererseits ist es genausogut möglich, daß das betroffene Programm davon gar nicht abhängt, sondern der Autor selber das Mysterium configure nicht richtig versteht und deshalb alle möglichen überflüssigen Tests aktiviert hat. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
01.05.2006, 12:38 Uhr Mazze Posts: 263 Nutzer |
Zitat: Ziemlich krass war es, als ich vor kurzem ein paar Spiele nach AROS portiert hatte: eine paar KByte Sourcode und fast ein MByte Configure-Geraffel . Ich habe mir dann einfach ein kleines Makefile geschrieben. -- AROS - Because every rose has its dorns. Meine Homepage [ - Antworten - Zitieren - Direktlink - ] |
01.05.2006, 12:42 Uhr DariusBrewka Posts: 899 [Benutzer gesperrt] |
Zitat: Naja, ich sehe das wieder anders, wenn ich einen Compiler für eine Bestimmte CPU erstelle, dann weiß ich wie diese mit ihren Daten umgeht und kann das in den Compiler direkt integrieren. Man muß ja auch beim Amiga GCC irgendwo festgelegt haben, dass long nicht 8 sondern 4 bytes lang ist. Theoretisch hätte dieses Information in irgendeiner Datei im GCC pfad hinterlegt gewesen sein auf die auch das TestProgramm unter Linux zugreifen könnte. Die Tests werden wohl so ablaufen, dass irgendein TestProgram z.b. printf("%d", sizeof(long)) ausgeben. [ - Antworten - Zitieren - Direktlink - ] |
02.05.2006, 17:13 Uhr Holger Posts: 8116 Nutzer |
Zitat:Also. 1) hängt der Stackaufbau nicht allein von der CPU, sondern von CPU und Systemkonvention ab, i.A. als ABI bezeichnet. 2) Ja, dem Compiler wird eben jene Information beigebracht. Aber es gibt keine Möglichkeit, ihn danach zu fragen. Jedenfalls nicht compilerunabhängig, aber Compilerunabhängigkeit ist ja eben das Ziel der configure-Orgien Zitat:long ist beim Amiga 4 bytes? Zitat:NEIN. Dann wäre der Sinn von configure ja abhanden gekommen, wenn es nur noch mit gcc, am besten noch von Version x bis Version y funktioniert. Zitat:Für sizeof kann man sich des Präprozessors bedienen, da der ja schon für die target-Umgebung korrekte header erhalten muß, z.B. INT_SIZE=$(cpp <<EOF sizeof(int) EOF ) Das heißt, man braucht kein Programm ausführen, man hat den Output ja schon. Für den Test, was bei Stackmanipulationen passiert, geht das eben nicht, weil es dazu, wie schon gesagt, keine Standard-Abfrage gibt. Da wird wahrscheinlich wirklich ein Programm der Art: C code:Wobei, aus dem Ergebnis irgendwelche Rückschlüsse auf den Stackaufbau zu ziehen, formal gesehen, komplett Banane ist.int a, b; printf("%d", &a-&b); Aber wie schon gesagt, ich versteh eh nicht, wieso irgendein normales C Programm diese Information benötigen sollte. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
03.05.2006, 09:54 Uhr gni Posts: 1106 Nutzer |
Zitat:Du hast einfach Pech. Das Programm, das Du zu übersetzen versuchst, ist nicht Cross-Compiler tauglich. [ - Antworten - Zitieren - Direktlink - ] |
03.05.2006, 09:58 Uhr gni Posts: 1106 Nutzer |
Zitat:Der Compiler des Buildsystems kann logischerweise nicht benutzt werden um etwas über die Zielplatform herauszufinden. Das sollte einleuchtend sein. [ - Antworten - Zitieren - Direktlink - ] |
03.05.2006, 10:00 Uhr gni Posts: 1106 Nutzer |
Zitat:Ich kenne keinen Amiga C-Compiler, der das anders macht. [ - Antworten - Zitieren - Direktlink - ] |
03.05.2006, 10:35 Uhr DariusBrewka Posts: 899 [Benutzer gesperrt] |
Zitat: Es wird in speziellen Fällen wohl so, aber Festgeschrieben ist das nicht und schon garnicht einleuchtend. [ - Antworten - Zitieren - Direktlink - ] |
03.05.2006, 11:16 Uhr gni Posts: 1106 Nutzer |
Zitat:Ich will garnicht wissen, wo Dein Verständnisproblem ist. [ - Antworten - Zitieren - Direktlink - ] |
03.05.2006, 11:42 Uhr DariusBrewka Posts: 899 [Benutzer gesperrt] |
Zitat: Sorry, ich gebe die Frage zurück, wie wärs wenn das Programm auf der Build-Plattform übersetzt wird und mir dann einfach gewisse Fragen stellt? ist zwar Blöd aber es ist eine von vielen Möglichkeiten auch auf der Buildplattform etwas über's Ziel zu erfahren. [ - Antworten - Zitieren - Direktlink - ] |
03.05.2006, 13:41 Uhr Holger Posts: 8116 Nutzer |
Zitat:Wenn configure in der Lage wäre, Dich einfach danach zu fragen, wäre es vollkommen unnötig, irgendetwas für die build-plattform zu übersetzen. Kann es aber nicht, das erklärte Ziel von configure ist ja, eben all dies automatisch herauszufinden. Allerdings hat Mazze ja schon den entscheidenen Hinweis gegeben: Du kannst evtl. eben jene Antworten über Kommandozeilenoptionen an configure übergeben. Tut mir leid, daß ich Dir dazu keine konkreteren Tipps geben kann. Ich muß mich zum Glück nicht jeden Tag mit configure rumschlagen. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
03.05.2006, 15:29 Uhr gni Posts: 1106 Nutzer |
Zitat:Übersetzen geht schon - das Ausführen ist das Problem, da Programme von $host nicht auf $build laufen. Cross-compiler erstellen nunmal Programme für "ihr" Target. Daraus kann man lernen, das Software, die während eines configure-Laufes Testprogramme laufen lassen will, nicht per "automatisch" configuriert werden kann. [ - Antworten - Zitieren - Direktlink - ] |
03.05.2006, 17:18 Uhr Holger Posts: 8116 Nutzer |
Zitat: Ist mir schon klar. Sagte ja nur, daß wenn Darius' Idee, daß das übersetzte Programm dann ihn fragt, was denn nun Sache wäre, man sich das Übersetzen sparen könnte. configure weiß ja, was es fragen will... Aber davon unabhängig gibt es ja Fragen, die man tatsächlich automatisch (auch bei cross-compilern) beantworten kann, wie z.B. sizeof(int). Das habe ich ja schon oben beschrieben. Der Witz dabei ist allerdings, daß man ja genau solche Tests überhaupt nicht braucht, da sizeof(int) ja sowieso überall im C-Code zur Verfügung steht. Und das ja auch auf höherer Ebene, struct { short int a; int b; long int c; } x; ... sizeof(x) funktioniert sogar besser als irgendein script, das die Größen von Hand ermittelt, reinpatcht und dabei mögliches padding übersieht... mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
03.05.2006, 23:03 Uhr DariusBrewka Posts: 899 [Benutzer gesperrt] |
Theoretisch heißt das (für mich), configure auf der Build-Plattform aufrufen und dann die makefiles für die Target/Host-Plattform anpassen. Das Ganze Problem war, weil ich configure mit --host=i386-aros aufgerufen habe und configure (zwar nicht in diesem konkreten Fall (growing Stackpointer)) ein Tool für Target (=AROS) compiliert, welches irgendwelche Include Datei erzeugt, unter Linux starten wollte. [ - Antworten - Zitieren - Direktlink - ] |
04.05.2006, 00:05 Uhr Holger Posts: 8116 Nutzer |
Zitat: Wenn Du nicht die Variante, alle Tests manuell zu "disablen", benutzen willst, kannst Du es natürlich auch so probieren. Ob's klappt, hängt natürlich davon ab, wieviel Abhängigkeiten das Programm zu den Systemeigenheiten (denen, die zwischen Linux und Aros anders sind, natürlich) am Ende wirklich hat. Möglich wär's. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > Open Source Programme übersetzen | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |