Как вызвать кросс-компилятор MinGW в Linux?

У меня есть проект, который я хочу кросс-компилировать для Windows. У меня есть соответствующий Makefile и все работает с g++. я бежал

$ apt install mingw-w64

и загрузил 500 МБ пакетов, но я не могу понять, как его запустить. Исполняемого файла mingw нет, так как мне его скомпилировать?


person Martin Melka    schedule 13.04.2013    source источник
comment
Если вы запустите следующую команду из терминала, она должна сообщить вам исполняемый файл компилятора (g++ в этом примере). Затем вы можете соответствующим образом отредактировать свой make-файл. найти mingw | грэп г++   -  person thedaver64    schedule 13.04.2013
comment
Генерируется ли Makefile с помощью автоинструментов?   -  person gipi    schedule 13.04.2013
comment
@gipi Честно говоря, я не помню, я использую cmake для своих проектов.   -  person thedaver64    schedule 13.04.2013
comment
@thedaver64 это важно, в cmake есть параметры для указания цепочки инструментов   -  person gipi    schedule 13.04.2013
comment
@gipi В cmake я просто выпускаю make-файлы cmake -G MinGW для компиляции в Windows и cmake -G Unix Makefiles при компиляции в моем Linux-боксе для создания Makefile. Это то, что вам нужно? Если нет, то придется уточнять :)   -  person thedaver64    schedule 13.04.2013


Ответы (4)


Если вы посмотрите на списки файлов на веб-сервере пакетов Ubuntu для составляющих пакетов mingw-w64:

Вы можете видеть, что mingw-w64 предоставляет toolchain, то есть набор альтернативных инструментов (компилятор, компоновщик, заголовки и т. д.), используемых для компиляции вашего кода для другой системы.

Если вы хотите скомпилировать код C++ для 64-битной системы, вам нужно будет использовать /usr/bin/x86_64-w64-mingw32-g++-win32. Вы можете использовать переменную среды CXX, чтобы указать большинству файлов Makefile использовать этот компилятор для компиляции кода.

person gipi    schedule 13.04.2013
comment
Переменной для тулчейна нет, но можно задать переменные для компиляторов C и C++: CC и CXX соответственно. - person Alexey Shmalko; 23.09.2014

Другой вариант — взглянуть на Mingw Cross Environment (MXE), специально предназначенный для кросс-компиляции из Linux в Windows ( а в последнее время и на Mac). Пакет имеет встроенную поддержку xupport для большого количества библиотек и активно развивается. Просто взгляните на веб-сайт, чтобы узнать, соответствует ли он вашим потребностям.

Кстати, рекомендуется использовать версию для разработки, а не релизную версию. Это связано с тем, что выпускные версии, как правило, очень быстро устаревают из-за того, что сопровождающие пакеты (библиотек) меняют URL-адреса, что приводит к поломке выпускной версии MXE. Разрабатываемая версия, как правило, более актуальна.

person Bart    schedule 13.04.2013
comment
На сайте нет упоминания о Mac? Это выглядит довольно аккуратно, я новичок в этом, поэтому я предполагаю, что ваш инструмент сначала создает кросс-компилятор, а затем мне просто нужно использовать созданную вами цепочку инструментов для компиляции. - person CMCDragonkai; 27.06.2015
comment
Ну, это не мое, но это в значительной степени то, что он делает. Не уверен насчет текущего состояния поддержки Mac (давно не использовал mxe). В прошлом упоминалось, что они работали над поддержкой, но я понятия не имею, реализована ли она на самом деле. - person Bart; 01.07.2015

Я использовал это для кросс-компиляции postgres:

$ sudo apt-get install mingw-w64
$ ./configure --host=i686-w64-mingw32 --without-zlib #  32 bit
# or --host=x86_64-w64-mingw32  64 bit

ссылка здесь

Другие проекты делают это по-другому, например ffmpeg:

 ./configure --target-os=mingw32 --cross-prefix=i686-w64-mingw32-

или несколько

  ./configure CC=i686-w64-mingw32-gcc ...

и т.д. ГЛ!

person rogerdpack    schedule 09.10.2014

Вот как я нацеливаюсь на mingw g++ кросс-компилятор:

$ ./configure --with-mingw-cross-compiler=g++-mingw-w64-i686
person user8128167    schedule 12.12.2019