Как скомпилировать для Windows на Linux с gcc/g++?

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

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

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

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

Ответ 1

mingw32 существует как пакет для Linux. Вы можете перекрестно скомпилировать и связать приложения Windows с ним. Там есть учебник здесь, на форуме Code:: Blocks. Имейте в виду, что команда, например, изменяется на mingw32-gcc.

EDIT: Debian Linux, например, имеет MinGW в своих репозиториях:

$ apt-cache search mingw
mingw32 - Minimalist GNU win32 (cross) compiler
mingw32-binutils - Minimalist GNU win32 (cross) binutils
mingw32-runtime - Minimalist GNU win32 (cross) runtime
gcc-mingw32 - The GNU Compiler Collection (cross compiler for MingW32)
...

Ответ 2

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

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

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

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

для Fedora это

sudo yum groupinstall -y "MinGW cross-compiler"

Ответ 7

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

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

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

sudo apt-get install mingw-w64

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

x86_64-w64-mingw32-g++

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

Для 64-битного использования: x86_64-w64-mingw32-gС++

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