Ich bräuchte mal Unterstützung dabei, wie ich eine bestimmte GCC Version
nutzen kann die ich brauche, um einen Canadian Cross zu generieren, also
einen Compiler mit Build ≠ Host ≠ Target ≠ Build.
Den benötigten Build → Target Compiler kann ich selbst generieren. Was
mir zur Erzeugung des Host → Target Compilers fehlt ist der Build → Host
Compiler, nämlich https://packages.msys2.org/packages/mingw-w64-i686-gcc
Für den benötigten Cross Compiler gibt es also Packages zur
Installation, allerdings kann ich auf Build keine Software installieren,
und die Admins sind beschränkt auf Debian, für welches es kein
mingw-w64-i686-gcc Paket gibt.
Soweit ich das verstehe, wäre Docker eine Möglichkeit. Allerdings habe
ich noch nie was mit Docker gemacht, und beim Lesen der Tutorials dreh
ich mich im Kreis und komme vom Hölzchen aufs Stöckchen.
Vielleicht findet sich ja hier im Forum jemand, der den Nerv hat, nem
Docker Dummy den Weg zu weisen...
Build-Rechner: Debian 6.12.32-1 (2025-06-07) x86_64 GNU/Linux amd64
Mein lokaler Rechner ist ein x86_64 GNU/Linux mit Docker v27.5.1.
Mein Ziel ist es, auf Build (effektiv) Kommandos wie mingw-w64-i686-g++,
mingw-w64-i686-ld etc. ausführen zu können.
Alexander S. schrieb:> mir ist nicht ganz klar was Du genau suchst, aber kennst Du diese Seite>> https://packages.debian.org/search?keywords=mingw-w64>> https://packages.debian.org/sid/mingw-w64> This metapackage provides the MinGW-w64 development environment,> including C and C++ compilers.>> https://packages.debian.org/sid/gcc-mingw-w64> This metapackage provides the C compiler, supporting cross-compiling to> 32- and 64-bit MinGW-w64 targets.
Das scheinen zumindest die benötigten Compiler zu sein; ich geh mal
davon aus, dass auch die benötigten Binutils dabei sind? Was aber auf
jeden Fall auch gebraucht wird ist die Windows Laufzeitumgebung mit
kernel32.dll etc, weil man ohne die kein lauffähiges Programm
hinbekommt.
Und wenn ich nach i686-mingw oder i386-mingw suche wird auf der Seite
nix gefunden...
> oder hilft das nur hier für>> Johann L. schrieb:>> Den benötigten Build → Target Compiler kann ich selbst generieren.
Nein, mit MinGW hat das nix zu tun. Der Build → Target Compiler wird
gebraucht, um Target-Bibliotheken des zu bauenden Canadian Cross zu
übersetzen (libgcc, libc, libm, ...). Die Target-Libs können ja nicht
mit dem Canadian Cross selbst erzeugt werden, weil der ja auf i686-mingw
läuft.
Johann L. schrieb:> Alexander S. schrieb:>> mir ist nicht ganz klar was Du genau suchst, aber kennst Du diese Seite>>>> https://packages.debian.org/search?keywords=mingw-w64>> Das scheinen zumindest die benötigten Compiler zu sein; ich geh mal> davon aus, dass auch die benötigten Binutils dabei sind? Was aber auf> jeden Fall auch gebraucht wird ist die Windows Laufzeitumgebung mit> kernel32.dll etc, weil man ohne die kein lauffähiges Programm> hinbekommt.
Die kernel32.dll brauchst Du nicht zum erstellen von windows binaries.
Das brauchst Du erst wenn Du sie lauffen lassen willst. Das entweder auf
einer windows kiste oder in `wine`.
Binutils und 'development files' sind im debian repo in entsprechenden
Paketen auch dabei:
1
aptitude search binutils-mingw
2
p binutils-mingw-w64 - Cross-binutils for Win32 and Win64 using MinGW-w64
3
p binutils-mingw-w64-i686 - Cross-binutils for Win32 (x86) using MinGW-w64
4
p binutils-mingw-w64-i686:i386 - Cross-binutils for Win32 (x86) using MinGW-w64
5
p binutils-mingw-w64-x86-64 - Cross-binutils for Win64 (x64) using MinGW-w64
6
p binutils-mingw-w64-x86-64:i386 - Cross-binutils for Win64 (x64) using MinGW-w64
Das hier sollte alles liefern um unter Linux fremde Windows binaries zu
erzeugen. Es zieht die binutils, und vieles mehr, als dependency schon
an.
Das geht alles noch viel kuerzer, ich mag aber im Docker meinen eigenen
usernamen haben. Falls im docker entweder root oder ein spezieller
`dockeuser` kann all das groupadd und useradd ins Dockerfile verschoben
werden.
Bauen und starten. Im gleichen Verzeichnis in dem das Dockerfile liegt:
Hi
Zum erstellen diverser GCC Compiler verwenden wir hier
https://github.com/crosstool-ng/crosstool-ng/. Das erleichtert die Sache
ungemein und funktioniert auch ohne Docker inkl. Canadian-Cross.
Matthias
Ich verstehe sowieso nicht ganz, was das soll hier. Soll das eine
theoretische Arbeit werden?
Beispielsweise: Plattformen A B und C und C wäre dann Docker oder eine
VM?? Oder B?? Oder doch eher A??
-> Vorschlag: zuerstmal etwas mehr Plan in das Vorhaben hineinbringen,
das kann man den zum ersten viel besser kommunizieren, und zweitens,
lohnt es sich auch erst dann, nach weiteren Informationen im Netz zu
suchen, wenn eben klarer ist, wo man überhaupt hin will.
Ich versuche mal einen Ansatz:
Also die Entwicklungsumgebung ist beschränkt, welche Möglichkeiten hast
du trotzdem, Crosscompiling zu machen?
Kannst du die Admins diesbezüglich ausfragen, oder ist das nicht
erwünscht?
Foka M. schrieb:> Johann L. schrieb:>> Alexander S. schrieb:>>> mir ist nicht ganz klar was Du genau suchst, aber kennst Du diese Seite>>>>>> https://packages.debian.org/search?keywords=mingw-w64>>>> Das scheinen zumindest die benötigten Compiler zu sein; ich geh mal>> davon aus, dass auch die benötigten Binutils dabei sind? Was aber auf>> jeden Fall auch gebraucht wird ist die Windows Laufzeitumgebung mit>> kernel32.dll etc, weil man ohne die kein lauffähiges Programm>> hinbekommt.>> Die kernel32.dll brauchst Du nicht zum erstellen von windows binaries.
Also wenn ich eine main.c mit i686-w64-mingw32-gcc übersetze:
Sieht für mich so aus also würde gegen die Host-Libs gelinkt.
> docker run -it -e LOCAL_UID=$(id -u) -e LOCAL_GID=$(id -g) -e
Kann man auch ein Executable erstellen anstatt docker aufzurufen? Weil
Docker ist nicht installiert auf dem Build-Rechner, und ich kann da
keine Software installieren: Katze beißt sich in den Schwanz...
Und in diesen pfaden sind entsprechende windows libraries. Das sollte
normalerweise unter Windows mit einem installierten mingw auch vorhanden
sein.
Ich habe gerade ein keines `*.c` compiliert, welches nur per printf ein
float ausgibt, und wenn ich es mit wine lauffen lasse scheint es zu
funktionieren:
1
wine ./a.exe
2
00b8:fixme:wineusb:query_id Unhandled ID query type 0x5.
3
00b8:fixme:wineusb:query_id Unhandled ID query type 0x5.
4
00b8:fixme:wineusb:query_id Unhandled ID query type 0x5.
5
00b8:fixme:wineusb:query_id Unhandled ID query type 0x5.
6
'024.33'
Ich habe jetzt hier kein windows um es gegen zu checken, aber ich wuerde
davon ausgehen, dass es tut was es soll.
>>> docker run -it -e LOCAL_UID=$(id -u) -e LOCAL_GID=$(id -g) -e>> Kann man auch ein Executable erstellen anstatt docker aufzurufen? Weil> Docker ist nicht installiert auf dem Build-Rechner, und ich kann da> keine Software installieren: Katze beißt sich in den Schwanz...
Auf die Gefahr hin, dass es jetzt ausartet, weil ich eigentlich immer
noch keine Ahnung habe was Du wirklich machen willst, und Angenommen
Dein Build-Recher ist ein deb-basierte Linux-Kiste:
Hast Du auf dem Build-Rechner etwas Platz in deinem Home? Falls ja dann
kannst Du auf einem anderen deb basierten Linux Rechner, auf dem Du SW
nachinstallieren kannst:
Das erzeugt eine Liste aller Pakete die notwendig sind um den mingw-gcc
lauffen zu lassen. Diese Pakete kannst Du herunterladen `apt install
--download-only` (die landen dann irgendwo in /var/cache/apt) und diese
auf den Buld-Recher verschieben.
Auf dem Zielrechner kannst Du sie mit `dpkg -X packetName.deb
$HOME/mingwOderSo` entpacken.
Damit sollte ein mingw-gcc lokal in Deinem Home existieren. Evtl. musst
Du noch mit `LD_LIBRARY_PATH` oder `LD_PRELOAD` herumspielen, damit alle
libs gefunden werden. Der compiler wird auch seine system-includes/libs
nicht finden, dh. mehrere `-I` und `-L` werden notwendig sein. Ich hoffe
das Funktioniert, ich habe es nicht ausprobiert ;-)
Ansonsten, um einfach einen, zum Beispiel, avr-gcc fuer windows zu
bauen, wuerde ich auch keinen Docker verwenden. So wie ich es allerdings
verstehe, hast Du eine dedizierte Build-Kiste, oder sogar mehrere davon.
In dem Fall wuerde ich mal mit dem Admin reden, das er Dir Docker
installiert. IMHO, hat es den Vorteil, dass Du images auf der
'build-farm' verteilen kannst und die SW bauen wie Du willst.
-foka