Archiv verlassen und diese Seite im Standarddesign anzeigen : gcc-crosscompiler nach windows unter linux
schoppenhauer
27-12-2006, 22:25
Hallo.
Um meine Sourcecodes, die ich in c und c++ geschrieben habe, für Windows zugänglich zu machen, hab ich bisher einfach unter cygwin immer das argument --mno-cygwin hinzugefügt, und das hat auch funktioniert.
Aber: Ist es auch möglich, unter Linux .exe-Dateien in einer vergleichbaren Weise zu Cygwin herzustellen? Also welche, die keine weiteren Abhängigkeiten außer eben ggf. die DLLs haben? Also quasi nen Crosscompiler.
ja, zb indem du dir einen mingw32-gcc kompilierst, z.b mit dieser (http://basic.mozillanews.org/clanlib/mingw.html) Anleitung (afaik die die ich auch benutzt habe).
schoppenhauer
28-12-2006, 11:47
Ok. Danke. Sieht vielversprechend aus. Ich werds mal probieren. Vielen Dank.
peschmae
28-12-2006, 22:57
Debian hat dafür übrigens ein fertiges Paket. Dürften andere Distros auch haben.
MfG Peschmä
schoppenhauer
28-12-2006, 23:00
Debian hat dafür übrigens ein fertiges Paket. Dürften andere Distros auch haben.
Ja... Das hab ich gefunden... Und natürlich zuerst probiert, weil das ja auch in dem Tut0rial empfohlen wurde... Bin aber grad etwas überfordert... Also das tutorial scheint ziemlich stur nach seinem schema-f zu gehen, das man scheinbar mit der distributions-version nicht verfolgen kann... naja...
mal sehen. trotzdem danke soweit.
Fabeltier
31-12-2006, 21:00
Hallo,
Ich weiss nicht ob ich das jetzt richtig verstanden habe, Du willst einen portablen Code unter Linux fuer Windows crosscompilen, oder?
Warum kompilierst Du den Code denn nicht direkt unter Windows fuer Windows (is ja nich soo exotisch, dass jemand ein Windows hat) - etwa mit mingw ggf. auch mit dem mingw Paket von cygwin, wenn Du's eh schon drauf hast?
Afaik wird vom Crosscompi-lieren doch eher immer abgeraten, oder taeusch ich mich da?
schoppenhauer
31-12-2006, 21:35
Hallo,
Ich weiss nicht ob ich das jetzt richtig verstanden habe, Du willst einen portablen Code unter Linux fuer Windows crosscompilen, oder?Ja.
Warum kompilierst Du den Code denn nicht direkt unter Windows fuer Windows (is ja nich soo exotisch, dass jemand ein Windows hat) - etwa mit mingw ggf. auch mit dem mingw Paket von cygwin, wenn Du's eh schon drauf hast?Weil ich nicht immer wegen jeder kleinen Änderung extra windoofs starten will, die ich an meinem Prog mache.
Afaik wird vom Crosscompi-lieren doch eher immer abgeraten, oder taeusch ich mich da?Keine Ahnung. Aber ich wüsste nicht, wieso. Im Prinzip sollte man nicht vergessen, dass beim Compilieren nur aus Eingabedaten Ausgabedaten gemacht werden... Ich sehe nicht, wieso man Windoofs-Executables unter Linux nicht genauso herstellen können soll, außer, wenn der compiler schlecht konzipiert wäre.
schoppenhauer
01-01-2007, 12:55
Ok. Sry, aber ich kapier das Tutorial nicht. Also ich versteh nicht so ganz... das Tutorial scheint mir mehr eine Beschreibung dafür zu sein, wie man sich MinGW einrichtet unter Windows als unter Linux.
Ich möchte eigentlich einfach nur die Sources, die ich für Linux compiliere, auch für Windows compilieren können... Das Tutorial ist aber irgendwie... seltsam. Also es beschreibt nicht wirklich, wie man das macht... Jedenfalls sehe ich es nicht.
Was z.B. cross-configure.sh und cross-make.sh machen, kapier ich einfach nicht.
Also um direkt zu fragen: Wenn ich eine cpp-Datei habe... Die ich normalerweise mit g++ -c -o blabla.o blabla.cpp ... compilieren würde... Wie muss ich sie dann hier compilieren?
Ich hab für mein Prog noch keine Makefile und kein configure-Script geschrieben... Bzw. ne Makefile schon, aber auch nur für meinen Gebrauch... halt so, dass sie bei mir läuft... was soll ich also machen?
du hast ja jetzt einen gcc-crosscompiler. Den hast du ja als Paket installiert. Nun musst du halt diesen cross-compiler (bei mir "mingw32-g++") anstelle des "normalen" g++ aufrufen.
also zb
mingw32-g++ -c -o blabla.o blabla.cpp
schoppenhauer
01-01-2007, 21:11
du hast ja jetzt einen gcc-crosscompiler. Den hast du ja als Paket installiert. Nun musst du halt diesen cross-compiler (bei mir "mingw32-g++") anstelle des "normalen" g++ aufrufen.
also zb
mingw32-g++ -c -o blabla.o blabla.cpp
Ok. Danke... Bei mir heißen die irgendwie i586bla... (drum hab ich auch vorhin was anderes gepostet und den post hier editiert).
Nunja. Einiges geht noch nicht (SDL, etc.), aber der Anfang ist gemacht... Und das ist gut so.
Vielen Dank nochmal an alle.
mit SDL könnte es ein bisschen komplizierter werden, evtl. findest du aber irgendwo fertige pakete mit denen du unter Linux SDL-Apps mit mingw kompilieren kannst. (zb von hier (http://www.libsdl.org/extras/win32/cross/mingw32-linux-x86-glibc-2.3.tar.gz), ist allerdings eine Version die mit glibc 2.3 kompiliert wurde)
schoppenhauer
02-01-2007, 15:20
Jap. Mit SDL isses tatsächlich etwas komplizierter... Hab mich mal an http://wiki.njh.eu/MinGW-Cross-Compiling_mit_SDL (dieses) Tut0rial gehalten... und .o-Files bekomm ich auch hin... Aber leider keine .exe-Dateien. Keine Ahnung, was ich falsch mache...
Aber nunja. Also das kann ich zumindest noch unter Cygwin compilieren... SDL_image mag auch nicht unter cygwin gehen... Warum auch immer :-(
Sprich: Ich hab keine möglichkeit, meine Progs auf Windoofs zu portieren, da sie SDL_image benutzen...
Afaik wird vom Crosscompi-lieren doch eher immer abgeraten, oder taeusch ich mich da?
Die Windows Version von VLC kompelierens AFAIK auch immer unter Linux.
peschmae
08-01-2007, 18:57
Der Punkt diesbezüglich ist vor allem dass
a) das GCC Team nicht garantiert dass das gleiche rauskommt (das ist u.A. auch der Grund wieso Debian für Grundsätzlich langsamere Architekturen wie m86k keine ix86 (oder andere) Buildserver verwendet)
b) testen musst du eh - und wenn du dazu sowieso schon Windows starten musst kannst dus auch gleich dort kompilieren. Bei Embedded Systemen à la arm sieht das natürlich ganz anders aus - aber darum gehts hier ja erst mal nicht.
MfG Peschmä
schoppenhauer
08-01-2007, 19:07
Der Punkt diesbezüglich ist vor allem dass
a) das GCC Team nicht garantiert dass das gleiche rauskommt (das ist u.A. auch der Grund wieso Debian für Grundsätzlich langsamere Architekturen wie m86k keine ix86 (oder andere) Buildserver verwendet)
b) testen musst du eh - und wenn du dazu sowieso schon Windows starten musst kannst dus auch gleich dort kompilieren. Bei Embedded Systemen à la arm sieht das natürlich ganz anders aus - aber darum gehts hier ja erst mal nicht.
MfG Peschmä
Ich kann mir einfach nicht vorstellen, wo da das Problem ist... Bzw. der wesentliche Unterschied... mingw-gcc ist doch quasi auch in irgendwas wie c++ oder so geschrieben, und sollte somit sowohl für windows als auch für Linux compilierbar sein... Und... Trotz all dem Premborium drumrum: Ein Compiler macht doch im Endeffekt nichts anderes als aus einem Eingabestring einen Ausgabestring... Ob er das nun unter Linux oder unter Windows tut, sollte doch keinen wesentlichen Unterschied machen. Bzw. welchen sollte es machen?
Ein bissel Anpassung von Wegen Verzeichnisstruktur ist möglicherweise Notwendig, ja, das kann ich mir vorstellen... aber mehr doch auch nicht.
Und das Testen... Naja... Das kann man ja zur Not in den meisten Fällen auch mit wine z.B. - also wenn es schon unter wine läuft, dann ja wohl erst recht unter windows.
Was ich am seltsamsten überhaupt finde, ist, dass man z.B. unter linux selbst nichtmal sachen für andere Architekturen builden kann... Ich kapier einfach nicht das prinzipielle Problem dahinter. Es würde mich aber interessieren. Also ich mein, solange man nicht gegen shared-libs linkt, dürfte es doch keinen Unterschied machen (und selbst dann nicht wirklich).
peschmae
08-01-2007, 21:15
Ich kann mir einfach nicht vorstellen, wo da das Problem ist... Bzw. der wesentliche Unterschied... mingw-gcc ist doch quasi auch in irgendwas wie c++ oder so geschrieben, und sollte somit sowohl für windows als auch für Linux compilierbar sein... Und... Trotz all dem Premborium drumrum: Ein Compiler macht doch im Endeffekt nichts anderes als aus einem Eingabestring einen Ausgabestring... Ob er das nun unter Linux oder unter Windows tut, sollte doch keinen wesentlichen Unterschied machen. Bzw. welchen sollte es machen?
Naja, irgendwo findet sich immer ein haariges Detail das überhaupt nicht so tut wie man dachte es würde.
Sagt auch keiner dass das nicht funktioniert oder so.
Ist nur halt so dass man nicht alle kombinationen hinreichend testen kann um mit einer gewissen Sicherheit zu sagen dass sie auch zuverlässig laufen. Und für jemanden wie Debian dessen Kompilate dann ein paar Tausend (im Falle von m86k) Leute verwenden ist das natürlich so nicht gerade das gelbe vom ei. Also lässt man das in dem Falle halt.
Und das Testen... Naja... Das kann man ja zur Not in den meisten Fällen auch mit wine z.B. - also wenn es schon unter wine läuft, dann ja wohl erst recht unter windows.
Ja, das kannst du machen. Nur hängts, wenn du die grösseren Probleme gefunden hast, eh an Details und die findest du sowieso nur auf der konkreten Zielplattform.
Den Schluss "läuft auf Wine" ==> "läuft auf Windows" würde ich so jetzt nicht ziehen ;)
Was ich am seltsamsten überhaupt finde, ist, dass man z.B. unter linux selbst nichtmal sachen für andere Architekturen builden kann... Ich kapier einfach nicht das prinzipielle Problem dahinter. Es würde mich aber interessieren. Also ich mein, solange man nicht gegen shared-libs linkt, dürfte es doch keinen Unterschied machen (und selbst dann nicht wirklich).
Klar kannst du das - wieso sollte das nicht gehen? Ist überhaupt kein Problem, zumindest mit GCC/G++ und co.
MfG Peschmä
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.