Как скомпилировать для Windows на Linux с помощью gcc / g ++? - PullRequest
90 голосов
/ 09 января 2010

Я написал некоторые эффекты на C ++ (g ++), используя freeglut на Linux, и скомпилировал их с помощью

g++ -Wall -lglut part8.cpp -o part8

Так что мне было интересно, возможно ли сделать так, чтобы g ++ создавал статически скомпилированные исполняемые файлы Windows, содержащие все необходимое?

У меня нет Windows, поэтому было бы здорово, если бы я мог сделать это в Linux:)

Ответы [ 7 ]

74 голосов
/ 09 января 2010

mingw32 существует как пакет для Linux. С его помощью вы можете кросс-компилировать и связывать приложения Windows. На форуме Code :: Blocks есть учебник . Помните, что команда изменится на x86_64-w64-mingw32-gcc-win32, например.

Например, в Ubuntu есть MinGW в репозиториях:

$ apt-cache search mingw
[...]
g++-mingw-w64 - GNU C++ compiler for MinGW-w64
gcc-mingw-w64 - GNU C compiler for MinGW-w64
mingw-w64 - Development environment targeting 32- and 64-bit Windows
[...]
26 голосов
/ 19 июля 2013

Один из вариантов компиляции для Windows в Linux - через mingw. Я нашел очень полезное руководство здесь .

Чтобы установить mingw32 в системах на основе Debian, выполните следующую команду:
sudo apt-get install mingw32 mingw32-binutils mingw32-runtime

Для компиляции вашего кода вы можете использовать что-то вроде:
i586-mingw32msvc-g++ -o myApp.exe myApp.cpp

Иногда вам захочется протестировать новое приложение Windows непосредственно в Linux. Вы можете использовать вино для этого, хотя вы всегда должны помнить, что вино может содержать ошибки. Это означает, что вы не можете быть уверены, что ошибка связана с вином, вашей программой или обоими, поэтому используйте Wine только для общего тестирования.

Чтобы установить wine, запустите:
sudo apt-get install wine

14 голосов
/ 01 ноября 2017

Предлагаемый метод дал мне ошибку в Ubuntu 16.04: E: Невозможно найти пакет mingw32

=============================================== ============================

Чтобы установить этот пакет в Ubuntu, пожалуйста, используйте следующее:

sudo apt-get install mingw-w64

После установки вы можете использовать его:

x86_64-w64-mingw32-g++

Обратите внимание!

Для 64-разрядного использования: x86_64-w64-mingw32-gc ++

Для 32-разрядного использования: i686-w64-mingw32-g ++

12 голосов
/ 13 января 2016

Установите кросс-компилятор, например mingw64, из вашего менеджера пакетов. Затем выполните компиляцию следующим образом: вместо простого вызова gcc вызовите i686-w64-mingw32-gcc для 32-битной Windows или x86_64-w64-mingw32-gcc" для 64-битной Windows. Я также хотел бы использовать параметр --static, поскольку целевая система может иметь не все библиотеки.

Если вы хотите скомпилировать другой язык, например, Fortran, замените -gcc на -gfortran в предыдущих командах.

5 голосов
/ 09 января 2010

Я использовал mingw в Linux для создания исполняемых файлов Windows в C, я подозреваю, что C ++ также будет работать.

У меня есть проект ELLCC, который упаковывает clang и другие вещи в цепочку инструментов кросс-компиляции. Я использую его для компиляции clang (C ++), binutils и GDB для Windows. Перейдите по ссылке для скачивания на ellcc.org для предварительно скомпилированных двоичных файлов для нескольких хостов Linux.

4 голосов
/ 23 февраля 2014

От: https://fedoraproject.org/wiki/MinGW/Tutorial

Начиная с Fedora 17, можно легко создавать (кросс-компилировать) двоичные файлы для целей win32 и win64. Это реализуется с помощью цепочки инструментов mingw-w64: http://mingw -w64.sf.net / . Использование этого набора инструментов позволяет создавать двоичные файлы для следующих языков программирования: C, C ++, Objective-C, Objective-C ++ и Fortran.

«Советы и рекомендации по использованию кросс-компилятора Windows»: https://fedoraproject.org/wiki/MinGW/Tips

1 голос
/ 20 октября 2014

для Fedora это

sudo yum groupinstall -y "MinGW cross-compiler"
...