Desidero compilare le librerie Qt (e eventualmente la mia applicazione) per una destinazione Windows x86_64 utilizzando un computer host Linux x86_64. Mi sento come se fossi vicino, ma potrei avere una fondamentale incomprensione di alcune parti di questo processo.Come configurare Qt per la cross-compilation da Linux a Windows target?
Ho iniziato installando tutti i pacchetti mingw sulla mia macchina Fedora e quindi modificando il fileqmake.conf per adattarlo al mio ambiente. Tuttavia, mi sembra di essere bloccato con alcune opzioni di configurazione apparentemente ovvia per Qt: -platform
e -xplatform
. La documentazione Qt dice che -platform
dovrebbe essere l'architettura della macchina host (dove si sta compilando) e -xplatform
dovrebbe essere la piattaforma di destinazione per la quale si desidera distribuire. Nel mio caso, ho impostato -platform linux-g++-64
e -xplatform linux-win32-g++
dove linux-win32-g ++ è la mia configurazione win32-g ++ modificata.
Il mio problema è che, dopo aver eseguito la configurazione con queste opzioni, vedo che richiama il compilatore del mio sistema invece del cross-compilatore (x86_64-w64-mingw32-gcc). Se ometto l'opzione -xplatform
e imposta -platform
sulla mia specifica di destinazione (linux-win32-g ++), richiama il cross compiler ma poi gli errori quando trova alcune funzioni relative a Unix non sono definite.
Ecco alcuni risultati del mio ultimo tentativo: http://pastebin.com/QCpKSNev.
Domande:
Quando cross-compilazione qualcosa come Qt per Windows da un host Linux, dovrebbe il compilatore nativo mai essere richiamato? Cioè, durante un processo di compilazione incrociata, non dovremmo usare solo il crosscompiler? Non vedo perché lo script configure di Qt tenti di richiamare il compilatore nativo del mio sistema quando specifico l'opzione
-xplatform
.Se sto utilizzando un cross-compiler mingw, quando sarà necessario gestire un file di specifiche? I file delle specifiche per GCC sono ancora una specie di mistero per me, quindi mi chiedo se qualche sfondo qui mi aiuterà.
In generale, oltre a specificare un cross-compilatore nel mio qmake.conf, cos'altro avrei potuto prendere in considerazione?
Credo che sia necessaria una build locale di qmake per eseguire il bootstrap del resto della build. vedere anche i link in http://stackoverflow.com/questions/1025687/cross-compile-in-linux-or-windows –
Ok, questo ha senso. Ora ho appena trovato un altro problema, mi sembra di mischiare toolchain nativi e cross. L'errore nel mio output pastebin sembra essere dovuto alla chiamata 'x86_64-w64-mingw32-as' al posto di quella nativa. –
Raramente contrassegno una domanda SO come preferita, ma questa era una domanda unica e interessante con una bella risposta. – jdi