Cross-kompilieren auf Ubuntu für Windows klappt nicht



  • Hallo,

    leider bin ich auf dem gebiet ein Programm für Windows zu kompilieren noch unerfahren. Ich möchte das Programm XCSoar (https://github.com/XCSoar/XCSoar) für Windows auf einem Ubuntusystem (18.04) cross-kompilieren. In der Anleitung steht (https://download.xcsoar.org/nightly_builds/7.0_preview15~git%23a8f6d167/manual/XCSoar-developer-manual.pdf) dass ich ein paar Pakete installieren muss, was ich auch getan habe, und dann mit make TARGET=WIN64 den Vorgang starte. Leider bekomme ich eine Fehlermeldung, mit der ih nicht weiterkomme:

    CCLD     curl.exe
    /usr/lib/gcc/x86_64-w64-mingw32/7.3-win32/../../../../x86_64-w64-mingw32/lib/libmingw32.a(lib64_libmingw32_a-crt0_c.o): In function `main':
    ./mingw-w64-crt/crt/crt0_c.c:18: undefined reference to `WinMain'
    collect2: error: ld returned 1 exit status
    Makefile:973: recipe for target 'curl.exe' failed
    make[3]: *** [curl.exe] Error 1
    Makefile:2087: recipe for target 'all-recursive' failed
    make[2]: *** [all-recursive] Error 1
    Makefile:985: recipe for target 'all-recursive' failed
    make[1]: *** [all-recursive] Error 1
    Traceback (most recent call last):
      File "./build/thirdparty.py", line 151, in <module>
        x.build(toolchain)
      File "/home/User/Desktop/XCSoar/build/python/build/autotools.py", line 100, in build
        MakeProject.build(self, toolchain, build)
      File "/home/User/Desktop/XCSoar/build/python/build/makeproject.py", line 31, in build
        self.make(toolchain, wd, self.get_make_args(toolchain))
      File "/home/User/Desktop/XCSoar/build/python/build/makeproject.py", line 28, in make
        cwd=wd, env=toolchain.env)
      File "/usr/lib/python3.6/subprocess.py", line 311, in check_call
        raise CalledProcessError(retcode, cmd)
    subprocess.CalledProcessError: Command '['make', '--quiet', '-j8']' returned non-zero exit status 2.
    build/thirdparty.mk:45: recipe for target 'output/WIN64/lib/x86_64-w64-mingw32/stamp' failed
    make: *** [output/WIN64/lib/x86_64-w64-mingw32/stamp] Error 1
    

    Für Hilfe wäre ich extrem dankbar!!



  • @Blaubart sagte in Cross-kompilieren auf Ubuntu für Windows klappt nicht:

    t/crt0_c.c:18: undefined reference to `WinMain'

    Das ist aus meiner Sicht das Wesentliche. Der Einsprungpunkt für Windows fehlt.

    Details dazu müssten hier stehen:
    https://docs.microsoft.com/de-de/windows/win32/learnwin32/winmain--the-application-entry-point?redirectedfrom=MSDN



  • Ich habe mal nach dem Begriff WinMain in den Dateien gesucht. Es gibt eine Datei Main.hpp, in der steht folgendes:
    int WINAPI
    WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine2,
    int nCmdShow)
    #endif

    Nur anfangen kann ich damit nicht viel 😉



  • @Blaubart sagte in Cross-kompilieren auf Ubuntu für Windows klappt nicht:

    Ich habe mal nach dem Begriff WinMain in den Dateien gesucht. Es gibt eine Datei Main.hpp, in der steht folgendes:
    int WINAPI
    WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine2,
    int nCmdShow)
    #endif

    Nur anfangen kann ich damit nicht viel 😉

    Genau. Aber für diese Deklaration fehlt die Implementation, nehme ich zumindest an. Ich selber arbeite allerdings nicht mit "main.h" oder "main.hpp". Keine Ahnung ob das üblich ist.
    Für Frontends nehm ich immer QT und habe daher von Haus aus plattformunabhängigkeit.



  • Nein, das ist schon die Implementation, s. XCSoar.cpp (Zeile 139).
    Aber anscheinend ist das Makro _WIN32 beim Kompilieren nicht gesetzt.

    Zeige mal den Aufruf von gcc XCSoar.cpp.



  • Also cross-kompilieren gehört ja nicht gerade zu den einfachen Dingen.
    Wieso nicht einfach unter Windows übersetzen?



  • root@Werkstatt:/User/Schreibtisch/XCSoar/src# gcc XCSoar.cpp
    In file included from XCSoar.cpp:30:0:
    LocalPath.hpp:29:10: fatal error: tchar.h: Datei oder Verzeichnis nicht gefunden
    #include <tchar.h>
    ^~~~~~~~~
    compilation terminated.



  • @hustbaer sagte in Cross-kompilieren auf Ubuntu für Windows klappt nicht:

    Also cross-kompilieren gehört ja nicht gerade zu den einfachen Dingen.
    Wieso nicht einfach unter Windows übersetzen?

    Weil ich mich an der Anleitung orientiert habe, und vom kompilieren keine Ahnung hab 😉



  • @Blaubart sagte in Cross-kompilieren auf Ubuntu für Windows klappt nicht:

    Weil ich mich an der Anleitung orientiert habe, und vom kompilieren keine Ahnung hab

    Ja nee, dann ist das ja superdupertoll. _WIN32 bitte irgendwie (makefile, compileraufruf) setzen. Warum es tchar.h nicht gibt kann ... Gründe haben:

    • gibt es wirklich nicht
    • nicht innerhalb der include-directories des compilers (dazu bitte die Dokumentation bemühen).

    Desweiteren ... wenn schon tchar.h benötigt wird dann kommt es höchstwahrscheinlich auch zu Problemen bei der Breite von wchar_t. Ob das schon berücksichtigt ist oder nicht - keine Ahnung.

    Gratistip: Lebenszeit ist wertvoll (zumindest für einige). Besorg' Dir ein Windows Environment (VM, Alter Blechtrottel, sonstwas) und kompilier's dort mit Visual Studio.



  • Ich habe den Fehler gefunden. Es ist ein Bug in der neusten Preview. Ein Version davor kompiliert durch.


Log in to reply