Leggere in inglese

Condividi tramite


Mingw-w64

Nota

MinGW non viene testato come parte del processo di integrazione continua del repository vcpkg, quindi le regressioni possono verificarsi come parte degli aggiornamenti della libreria. Le richieste pull che migliorano il supporto sono benvenute!

Triplette della community di Mingw-w64

vcpkg include triplette x64, x86, arm64 e arm community per Mingw-w64. Non dipendono da Visual Studio e possono essere usati in modo nativo in Windows e per la compilazione incrociata in altri sistemi operativi. Esistono due varianti di ogni tripletta, selezionando tra collegamento statico e dinamico. Gli strumenti effettivi (g++ e così via) devono essere denominati con prefissi specifici.

Architettura tripli della community di vcpkg Prefisso del nome dello strumento
x64 x64-mingw-dynamic, x64-mingw-static x86_64-w64-mingw32-
x86 x86-mingw-dynamic, x86-mingw-static i686-w64-mingw32-
arm64 arm64-mingw-dynamic, arm64-mingw-static aarch64-w64-mingw32-
arm arm-mingw-dynamic, arm-mingw-static armv7-w64-mingw32-

Queste triplette non vengono testate dall'integrazione continua, quindi molte porte non vengono compilate e anche le porte esistenti potrebbero interrompersi sugli aggiornamenti delle porte. Per questo motivo, il coinvolgimento della comunità è fondamentale!

Uso di Mingw-w64 in modo nativo in Windows

Con MSYS2, è possibile creare facilmente un ambiente completo per la compilazione di porte con Mingw-w64 in un PC Windows.

Quando si compila un software per ambienti Windows nativi, è necessario usare un sottosistema mingw di MSYS2 e installare alcuni pacchetti (con un prefisso specifico) per questo sottosistema.

architecture triplet vcpkg sottosistema prefisso del pacchetto
x64 x64-mingw-dynamic, x64-mingw-static mingw64 mingw-w64-x86_64-
x86 x86-mingw-dynamic, x86-mingw-static mingw32 mingw-w64-i686-

Dopo l'installazione di base di MSYS2, sarà necessario installare alcuni pacchetti aggiuntivi per lo sviluppo di software, ad esempio per x64:

pacman -S --needed git base-devel mingw-w64-x86_64-toolchain

Il sottosistema attivo viene selezionato eseguendo l'app MinGW MSYS2 o modificata in un terminale in esecuzione

source shell mingw64   # for x64, or "mingw32" for x86

Il bootstrap di vcpkg deve essere eseguito eseguendo bootstrap-vcpkg.bat. Questo comando scaricherà il file vcpkg.exe ufficiale.

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.bat

Per la creazione di pacchetti, è necessario indicare a vcpkg che si vuole usare il tripletto mingw. Questa operazione può essere eseguita in modi diversi. Quando Visual Studio non è installato, è necessario impostare anche la tripletta host su mingw. Questa operazione è necessaria per risolvere le dipendenze dell'host. Per praticità, è possibile usare le variabili di ambiente per impostare entrambe le triplette:

export VCPKG_DEFAULT_TRIPLET=x64-mingw-dynamic
export VCPKG_DEFAULT_HOST_TRIPLET=x64-mingw-dynamic

A questo punto è possibile testare la configurazione:

./vcpkg install zlib

Come evitare di combinare installazioni diverse

Il progetto MSYS2 avvisa esplicitamente che "la combinazione di programmi da altre installazioni MSYS2, installazioni Cygwin, toolchain del compilatore o anche vari altri programmi non è supportata e probabilmente interromperà le cose in modi imprevisti". Ad esempio, il passaggio corretto degli argomenti della riga di comando con virgolette ed escape potrebbe non riuscire.

Tuttavia, le porte vcpkg creano in modo implicito installazioni MSYS2, ad esempio per pkg-config e per vari altri strumenti di compilazione necessari per gestire i pacchetti basati su autoconf. In particolare, quando le porte anteponono la directory degli strumenti alla PATH variabile di ambiente, questo può modificare quale strumento con un nome specifico viene effettivamente richiamato e come gli argomenti vengono passati tra gli strumenti.

Per attenuare questi problemi quando si usa un'installazione MSYS2 completa, provare a mantenere le directory del sottosistema msys (/usr/bin, bin) fuori dalla PATH variabile di ambiente rilevata da vcpkg. In bash è possibile modificare solo PATH per una singola chiamata di vcpkg:

PATH="${PATH/:\/usr\/bin:\/bin:/:}" ./vcpkg install libpq

In alternativa, è possibile eseguire vcpkg da un normale prompt dei comandi, dopo aver aggiunto solo la directory mingw desiderata (ad esempio C:\msys64\mingw64\bin) a PATH.

Quando si usa vcpkg per CI con immagini standard in Azure Pipelines, Github Actions o simili, l'impostazione predefinita PATH potrebbe contenere più directory che creano una combinazione di programmi MSYS2 da installazioni diverse. È possibile impostare manualmente o PATH rimuovere le directory che contengono sh.exe, bash.exemsys-2.0.dll o cygwin1.dll.

Uso di Mingw-w64 per compilare programmi Windows in altri sistemi

È possibile usare i tripletti della community vcpkg mingw con toolchain nei computer non Windows per eseguire il software tra compilazioni per l'esecuzione in Windows. Molte distribuzioni linux offrono tali toolchain nei pacchetti facoltativi con un suffisso mingw-w64 o un prefisso. Ad esempio, per le distribuzioni basate su Debian, si inizierà con questo comando di installazione per la toolchain x64:

sudo apt-get install gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64

Le versioni in pacchetto delle toolchain Mingw-w64 nelle distribuzioni Linux potrebbero essere versioni precedenti che non dispongono di alcune funzionalità utili o correzioni di bug. Una toolchain indipendente alternativa è offerta da MXE.

Per il bootstrap di vcpkg, clonare il repository github ed eseguire lo bootstrap-vcpkg.sh script:

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg install zlib:x64-mingw-dynamic