Прочитать на английском

Поделиться через


Mingw-w64

Примечание

MinGW не тестируется как часть процесса CI репозитория vcpkg, поэтому регрессии могут возникать в рамках обновлений библиотеки. Повышение поддержки PR приветствуется!

Mingw-w64 community triplets

vcpkg включает x64, x86, arm64 и arm community triplets для Mingw-w64. Они не зависят от Visual Studio и могут использоваться изначально в Windows, а также для перекрестной компиляции в других операционных системах. Существует два варианта каждого триплета, выбор между статическим и динамическим связыванием. Предполагается, что фактические средства (g++ и т. д.) будут называться с определенными префиксами.

Архитектура Vcpkg community triplets Префикс имени средства
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-

Эти тройные значения не проверяются непрерывной интеграцией, поэтому многие порты не создаются, и даже существующие порты могут прерывать обновления портов. Из-за этого участие сообщества имеет первостепенное значение!

Использование Mingw-w64 в Windows в собственном коде

С помощью MSYS2 можно легко создать полную среду для создания портов с помощью Mingw-w64 на компьютере с Windows.

При создании программного обеспечения для собственных сред windows необходимо использовать подсистему mingw MSYS2 и установить некоторые пакеты (с определенным префиксом) для этой подсистемы.

архитектура vcpkg triplets подсистема Префикс пакета
x64 x64-mingw-dynamic, x64-mingw-static mingw64 mingw-w64-x86_64-
x86 x86-mingw-dynamic, x86-mingw-static mingw32 mingw-w64-i686-

После базовой установки MSYS2 необходимо установить несколько дополнительных пакетов для разработки программного обеспечения, например для x64:

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

Активная подсистема выбирается путем запуска приложения MSYS2 MinGW или изменения в работающем терминале.

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

Начальная загрузка vcpkg должна выполняться путем запуска bootstrap-vcpkg.bat. Эта команда скачайте официальный файл vcpkg.exe.

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

Для создания пакетов необходимо сообщить vcpkg, что вы хотите использовать mingw triplet. Это можно сделать разными способами. Если Visual Studio не установлен, необходимо также задать для узла триплет для mingw. Это необходимо для разрешения зависимостей узла. Для удобства можно использовать переменные среды для задания обоих триплетов:

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

Теперь вы можете протестировать настройку:

./vcpkg install zlib

Как избежать смешивания разных установок

Проект MSYS2 явным образом предупреждает , что "сочетание программ из других установок MSYS2, установок Cygwin, цепочки инструментов компилятора или даже другие программы не поддерживаются и, вероятно, прерывают вещи неожиданными способами". Например, правильная передача аргументов командной строки с кавыками и экранированием может завершиться ошибкой.

Но порты vcpkg неявно создают установки MSYS2, например для различных других средств сборки, необходимых для pkg-config работы с пакетами на основе autoconf. В частности, при подготовке портов к PATH переменной среды каталог средств может измениться, какое средство с определенным именем вызывается, и как аргументы передаются между инструментами.

Чтобы устранить такие проблемы при работе с полной установкой MSYS2, попробуйте сохранить каталоги подсистемы msys (/usr/bin, bin) вне PATH переменной среды, как показано vcpkg. В bash можно изменить PATH только один вызов vcpkg:

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

Кроме того, вы можете запустить vcpkg из обычной командной строки, добавив в него PATHтолько нужный каталог mingw (например, C:\msys64\mingw64\bin).

При использовании vcpkg для CI со стандартными образами в Azure Pipelines, Github Actions или аналогичном по умолчанию PATH могут содержаться дополнительные каталоги, которые создают сочетание программ MSYS2 из разных установок. Вы можете задать нужные PATH каталоги вручную или удалить каталоги, содержащие sh.exe, bash.exemsys-2.0.dll или cygwin1.dll.

Использование Mingw-w64 для создания программ Windows в других системах

Вы можете использовать vcpkg mingw community triplets с цепочками инструментов на компьютерах, отличных от Windows, для перекрестной компиляции программного обеспечения для запуска в Windows. Многие дистрибутивы Linux предлагают такие цепочки инструментов в необязательных пакетах с суффиксом mingw-w64 или префиксом. Например, для дистрибутивов на основе Debian вы начнете с этой команды установки для цепочки инструментов x64:

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

Упакованные версии цепочки инструментов Mingw-w64 в дистрибутивах Linux могут быть более старыми выпусками, которые не имеют некоторых полезных функций или исправлений ошибок. Альтернативная независимая цепочка инструментов предлагается MXE.

Для загрузки vcpkg клонируйте репозиторий bootstrap-vcpkg.sh github и запустите скрипт:

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