Compartilhar via


Mingw-w64

Observação

O MinGW não é testado como parte do processo de CI do repositório vcpkg, portanto, regressões podem ocorrer como parte das atualizações da biblioteca. PRs melhorando o suporte são bem-vindos!

Trigêmeos da comunidade Mingw-w64

vcpkg inclui x64, x86, arm64 e trigêmeos da comunidade arm para Mingw-w64. Eles não dependem do Visual Studio e podem ser usados nativamente no Windows, bem como para compilação cruzada em outros sistemas operacionais. Existem duas variantes de cada trigêmeo, selecionando entre ligação estática e dinâmica. Espera-se que as ferramentas reais (g++ etc.) sejam nomeadas com prefixos específicos.

Arquitetura Trigêmeos da Comunidade VCPKG Prefixo do nome da ferramenta
x64 x64-mingw-dinâmico, x64-mingw-estático x86_64-w64-mingw32-
x86 x86-mingw-dinâmico, x86-mingw-estático i686-w64-mingw32-
arm64 arm64-mingw-dinâmico, arm64-mingw-estático AARCH64-W64-MINGW32-
arm arm-mingw-dynamic, arm-mingw-static armv7-w64-mingw32-

Esses trigêmeos não são testados por integração contínua, então muitas portas não são construídas, e mesmo as portas existentes podem quebrar em atualizações de portas. Por isso, o envolvimento da comunidade é primordial!

Usando o Mingw-w64 nativamente no Windows

Com o MSYS2, é possível criar facilmente um ambiente completo para a construção de portas com o Mingw-w64 em um PC com Windows.

Ao criar software para ambientes Windows nativos, você deve usar um subsistema mingw do MSYS2 e instalar alguns pacotes (com um prefixo específico) para esse subsistema.

arquitetura Trigêmeos VCPKG subsystem prefixo do pacote
x64 x64-mingw-dinâmico, x64-mingw-estático MinGW64 MINGW-W64-x86_64-
x86 x86-mingw-dinâmico, x86-mingw-estático MinGW32 MINGW-W64-I686-

Após a instalação básica do MSYS2, você precisará instalar alguns pacotes adicionais para desenvolvimento de software, por exemplo, para x64:

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

O subsistema ativo é selecionado executando o aplicativo MSYS2 MinGW ou alterado em um terminal em execução por

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

O bootstrapping de vcpkg deve ser feito executando bootstrap-vcpkg.bat. Este comando irá baixar o vcpkg oficial.exe.

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

Para construir pacotes, você precisa dizer ao vcpkg que deseja usar o triplete mingw. Isso pode ser feito de diferentes maneiras. Quando o Visual Studio não está instalado, você também deve definir o host triplet para mingw. Isso é necessário para resolver dependências de host. Por conveniência, você pode usar variáveis de ambiente para definir ambos os trigêmeos:

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

Agora você pode testar sua configuração:

./vcpkg install zlib

Como evitar misturar diferentes instalações

O projeto MSYS2 avisa explicitamente que "misturar em programas de outras instalações MSYS2, instalações Cygwin, cadeias de ferramentas do compilador ou mesmo vários outros programas não é suportado e provavelmente quebrará as coisas de maneiras inesperadas." Por exemplo, a passagem adequada de argumentos de linha de comando com citação e fuga pode falhar.

Mas as portas vcpkg criam implicitamente instalações MSYS2, por exemplo, para e para várias outras ferramentas de compilação necessárias para pkg-config lidar com pacotes baseados no autoconf. Em particular, quando as portas precedem o diretório de ferramentas para a PATH variável de ambiente, isso pode alterar qual ferramenta com um nome específico é realmente invocada e como os argumentos são passados entre as ferramentas.

Para atenuar esses problemas ao trabalhar com uma instalação MSYS2 completa, tente manter os diretórios do subsistema msys (/usr/bin, ) fora da PATH variável de ambiente, binconforme encontrado pelo vcpkg. No bash, você pode modificar o PATH apenas para uma única chamada de vcpkg:

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

Como alternativa, você pode executar vcpkg a partir de um prompt de comando regular, depois de adicionar apenas o diretório mingw desejado (por exemplo C:\msys64\mingw64\bin, ) ao PATH.

Ao usar vcpkg para CI com imagens padrão em Pipelines do Azure, Ações do Github ou similares, o padrão PATH pode conter mais diretórios que criam uma combinação de programas MSYS2 de instalações diferentes. Talvez você queira definir o desejado PATH manualmente ou remover diretórios que contenham sh.exe, bash.exemsys-2.0.dll ou cygwin1.dll.

Usando o Mingw-w64 para criar programas do Windows em outros sistemas

Você pode usar os trigêmeos da comunidade vcpkg mingw com toolchains em computadores que não sejam Windows para compilar software para ser executado no Windows. Muitas distribuições Linux oferecem tais cadeias de ferramentas em pacotes opcionais com um sufixo ou prefixo mingw-w64. Como exemplo, para distribuições baseadas em Debian, você começaria com este comando de instalação para o toolchain x64:

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

As versões empacotadas das cadeias de ferramentas Mingw-w64 em distribuições Linux podem ser versões mais antigas que carecem de alguns recursos úteis ou correções de bugs. Uma cadeia de ferramentas independente alternativa é oferecida pela MXE.

Para inicialização vcpkg, clone o repositório github e execute o bootstrap-vcpkg.sh script:

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