Как скомпилировать для 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.