Hallo,
ich versuche gerade krampfhaft, ein bisschen Cross-Compiling fuer Windows zu betreiben. Ist uebrigens nicht zu empfehlen.
Erst einmal allgemeine Fragen:
Bei Debian haben die mingw32-Programme als Namen etwas wie i586-mingw32msvc-(cc|ld|...). Ich stolpere staendig ueber das Problem, dass aber die libtool-Skripte z.B. fuer dlltool den Namen "dlltool" erwarten, weswegen man sie immer nervigerweise per Hand nachpatchen muss. Gibt es da elegantere Loesungen? Vorschlaege?
Dann stolpere ich bei libphysfs ueber diesen Fehler:
i586-mingw32msvc-cc -Wl,--base-file,.libs/libphysfs-1-0-0.dll-base -Wl,-e,_DllMainCRTStartup@12 -o .libs/libphysfs-1-0-0.dll physfs.lo physfs_byteorder.lo .libs/libphysfs.lax/libarchivers.al/dir.lo .libs/libphysfs.lax/libarchivers.al/grp.lo .libs/libphysfs.lax/libarchivers.al/wad.lo .libs/libphysfs.lax/libarchivers.al/hog.lo .libs/libphysfs.lax/libarchivers.al/mvl.lo .libs/libphysfs.lax/libarchivers.al/zip.lo .libs/libphysfs.lax/libarchivers.al/qpak.lo .libs/libphysfs.lax/libplatform.al/unix.lo .libs/libphysfs.lax/libplatform.al/win32.lo .libs/libphysfs.lax/libplatform.al/posix.lo .libs/libphysfs.lax/libplatform.al/os2.lo -L/home/ulf/tmp/mingw32/lib archivers/.libs/libarchivers.al platform/.libs/libplatform.al -lz
/usr/lib/gcc/i586-mingw32msvc/3.4.2/../../../../i586-mingw32msvc/bin/ld: warning: cannot find entry symbol _DllMainCRTStartup@12; defaulting to 00401000
/usr/lib/gcc/i586-mingw32msvc/3.4.2/../../../../i586-mingw32msvc/lib/libmingw32.a(main.o):: undefined reference to `_WinMain@16'
collect2: ld returned 1 exit status make[2]: *** [libphysfs.la] Error 1
Hat jemand ein wenig Ahnung von der Materie? Weitere Infos und Probleme kann ich natuerlich auf Anfrage gerne liefern. Expat z.B. motzt auch noch rum, aber erst mal eins nach dem anderen.
Ulf
Am Donnerstag, 2. Juni 2005 16:05 schrieb Ulf Lorenz:
Hat jemand ein wenig Ahnung von der Materie? Weitere Infos und Probleme kann ich natuerlich auf Anfrage gerne liefern. Expat z.B. motzt auch noch rum, aber erst mal eins nach dem anderen.
Als Geheimtip von Spieleentwickler zu Spieleentwickler: http://freeciv.org/~jdorje/crosscompile/cross-compiling.html
Ist noch nicht soo umfangreich, aber jede weitere (schlechte) Erfahrung kann man ja dort mit reinbringen. Leider achten z.B. die GCC-Leute bei ihren Releases nicht auf cross-build-Fähigkeiten, das muss immer erst nachgepatcht werden. Probleme gibt es aber mit automake und libtool eigentlich nur wenige, sofern nicht rekursive Dependencies o.ä. verwendet werden.
Außerdem habe ich letzens Patches bekommen, die suggerieren, dass die Windows-Plattformen mal wieder völlig unterschiedliche Verhaltensweisen zeigen. So haben die tollen Windows2k-Entwickler vergessen, freeaddrinfo() zu implementieren. Normalerweise lässt man die Win-Portierungen deshalb von Leuten machen, die das unbedingt haben wollen, und achtet v.a. darauf seinen guten Quelltext nicht durch komische win-spezifische #ifdefs zu verunstalten :)
Josef
On Fri, Jun 03, 2005 at 12:48:32PM +0200, Josef Spillner wrote:
Als Geheimtip von Spieleentwickler zu Spieleentwickler: http://freeciv.org/~jdorje/crosscompile/cross-compiling.html
Nett. Ich habe nur ein Problem: Beim Nochmalnachschauen habe ich festgestellt, dass expat genau denselben Fehler liefert, obwohl es als "kompiliert out of the box" beschrieben wird. Also mache ich bestimmt etwas falsch. :(
Normalerweise lässt man die Win-Portierungen deshalb von Leuten machen, die das unbedingt haben wollen, und achtet v.a. darauf seinen guten Quelltext nicht durch komische win-spezifische #ifdefs zu verunstalten :)
Wie du sicher weisst, ist das Feedback nicht sooooo grossartig. Soll heissen, ich hatte bis jetzt 1x so etwas aehnliches wie ein Angebot zum Compilieren. Dafuer benoetigen das unsere Graphiker...
Ulf
On Thu, Jun 02, 2005 at 04:05:33PM +0200, Ulf Lorenz wrote:
/usr/lib/gcc/i586-mingw32msvc/3.4.2/../../../../i586-mingw32msvc/bin/ld: warning: cannot find entry symbol _DllMainCRTStartup@12; defaulting to 00401000
/usr/lib/gcc/i586-mingw32msvc/3.4.2/../../../../i586-mingw32msvc/lib/libmingw32.a(main.o):: undefined reference to `_WinMain@16'
Fuers Archiv: Google ist toll!
Der erste Fehler kommt staendig, wenn man unter Windows ein Programm kompiliert, das keine Konsole oeffnen will und sollte keine Probleme bereiten.
Fuer den zweiten Fehler habe ich zwei Loesungen gefunden: - Einige Leute berichten, dass das Hinzufuegen einer sinnlosen Main-Funktion hilft - andere sagen, dass man unbedingt die Reihenfolge der Bibliotheksangaben beachten muss.
Jetzt mal schauen, ob das auch in der Praxis so ist.
Mal eine Frage: Gibt es einen guten Grund, warum gcc so pingelig ist, was die Reihenfolge der eingebundenen Bibliotheken angeht (d.h. dass unter Umstaenden ein "gcc -lfoo -lbar ..." fehlschlaegt, waehrend ein "gcc -lbar -lfoo ..." klappt)? Ich kann mich entsinnen, dass ich schon einmal Tage vorm Rechner verbracht hatte, ehe ich dieses Problem loesen konnte.
Ulf
lug-dd@mailman.schlittermann.de