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


119

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

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

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

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


4
@AndiDog, "Первая доза бесплатно", верно. В любом случае настраивать автоматизированный процесс сборки на компьютере с Windows, пока у вас есть готовый и рабочий процесс для Linux, не требуется.
П Швед

Как бы вы протестировали программное обеспечение Windows без Windows? Используете вино?
el.pescado 09

7
@ el.pescado, сборка и тестирование - это совершенно разные задачи. Первым винда не нужна.
П Швед

Ответы:


92

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
[...]

3
Если вы используете debian, mingw32 уже находится в репозитории вместе с несколькими предварительно скомпилированными библиотеками.
liori

1
Что ж, на nongnu.org/mingw-cross-env есть среда кросс-компиляции . Например, он включает в себя freeglut. Но я этим не пользовался, так что не спрашивайте меня об этом;)
AndiDog

4
Означает ли "32" в mingw32, что я могу создать только 32-битный двоичный файл? Есть ли решение для создания 64-битного двоичного файла?
bluenote10

1
bluenote10: есть варианты для x64, например «x86_64-w64-mingw32-g ++». Базовый "mingw32" может быть, а может и не быть, но достаточно легко установить / использовать варианты по имени. ar2015: Он вообще не поддерживает C ++ 11 или вы говорите о проблеме, которая у вас была с ним? Пока мы говорим, я работаю над созданием проекта с помощью mingw, и это хорошая информация. Другие потоки указывают, что он поддерживает c ++ 11 (например, stackoverflow.com/questions/16136142/… ). Конечно, я буду рад помочь, но для этого лучше всего написать отдельный пост.
John P

1
Изменилось ли что-то по этой теме в последнее время?
Монреаль,

30

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

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

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

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

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


7
вам не нужно указывать mingw32-binutilsи mingw32-runtimeпотому что они являются зависимостямиmingw32
henje

круто, у cpp были очень простые ошибки (и void main(){}т. д.), я предполагаю, что он компилируется в Windows, но не работает в mingw, я их исправил. Я тоже пробовал, i586-mingw32msvc-cppи он сгенерировал текстовый файл с чем-то вроде того, что нужно скомпилировать, lol .. g ++ сработал, спасибо!
Сила Водолея

2
@henje, если вы не укажете их, они могут быть автоматически удалены менеджером пакетов при удалении mingw32(помечены как «зависимости». Если вы укажете их, они не будут (помечены как «ручные»).
Matthieu

19

Предлагаемый метод дал мне ошибку в 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 ++


14

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

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


7

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

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


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

5

От: 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


3

для Fedora это

sudo yum groupinstall -y "MinGW cross-compiler"

1
Для всех пользователей Fedora: здесь есть отличное руководство: fedoraproject.org/wiki/MinGW (отредактировано из-за неправильной ссылки)
LemurPwned

Именно то, что я искал! Работает sudo dnf groupinstall ...тоже.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.