2010-01-09 2 views
67

я написал некоторые эффекты в C++ (г ++) с использованием freeglut на Linux, и я компилировать их сКак скомпилировать для Windows на Linux с gcc/g ++?

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

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

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

+4

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

+0

Как бы вы протестировали свое программное обеспечение Windows без Windows? Использование вина? –

+3

@ el.pescado, строительство и тестирование - совершенно разные задачи. Windows не нужна для первой. –

ответ

59

mingw32 существует в виде пакета для Linux. Вы можете перекрестно скомпилировать и связать приложения Windows с ним. Есть учебник here at the Code::Blocks forum. Имейте в виду, что команда изменяется, например, на 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

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

+0

Да, просто добавьте его на мой пост, когда вы написали свой комментарий :) Thx – AndiDog

+0

, чтобы быть полным, вам нужно было бы предоставить библиотеку переполнения, совместимую с mingw, нет? – Bahbar

5

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

+3

........... Как? –

+1

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

20

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

Для установки 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

+4

вам не нужно указывать 'mingw32-binutils' и' mingw32-runtime', потому что они зависят от 'mingw32' – henje

+0

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

3

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

7

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

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

1

Предлагаемый метод дал мне ошибку на Ubuntu 16.04: E: Unable to locate package mingw32

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

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

sudo apt-get install mingw-w64 

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

x86_64-w64-mingw32-g++ 

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

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

Для 32-битового использования: i686-w64-mingw32-G ++