Johann L. schrieb:
Also wenn ich eine main.c mit i686-w64-mingw32-gcc übersetze:
1 |
> $ i686-w64-mingw32-gcc main.c -v
|
2 |
> ...
|
3 |
> /usr/bin/i686-w64-mingw32-ld ... -plugin-opt=-pass-through=-lmsvcrt
|
4 |
> -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32
|
5 |
> -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32
|
6 |
> -plugin-opt=-pass-through=-lmingw32 ... -lmsvcrt -ladvapi32 -lshell32
|
7 |
> -luser32 -lkernel32 ...
|
8 |
>
|
Sieht für mich so aus also würde gegen die Host-Libs gelinkt.
Sieht nur so aus:
1 |
/usr/bin/i686-w64-mingw32-gcc-win32 --verbose wattauchimmer.c
|
2 |
...
|
3 |
LIBRARY_PATH=/usr/lib/gcc/i686-w64-mingw32/12-win32/:/usr/lib/gcc/i686-w64-mingw32/12-win32/../../../../i686-w64-mingw32/lib/../lib/:/usr/lib/gcc/i686-w64-mingw32/12-win32/../../../../i686-w64-mingw32/lib/
|
4 |
...
|
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:
1 |
apt install apt-rdepends
|
2 |
apt-rdepends gcc-mingw-w64 | grep Depends| sort | uniq
|
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