Як компілювати для 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

7
@ el.pescado, створення та тестування - це зовсім різні завдання. Windows для перших не потрібен.
П Швед

Відповіді:


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 . Наприклад, він включає фриглют. Але я цього не використовував, тому не питайте мене про це;)
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/… ). Звичайно, я б радий допомогти, але найкращий варіант для цього був би найкращим.
Джон П

1
Чи змінилися речі з цієї теми останнім часом?
Монреаль

30

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

Щоб встановити mingw32 в системах на базі Debian, запустіть таку команду:
sudo apt-get install mingw32

Для складання коду ви можете використовувати щось на кшталт:
i586-mingw32msvc-g++ -o myApp.exe myApp.cpp

Іноді ви хочете протестувати нову програму Windows безпосередньо в Linux. Ви можете використовувати для цього вино, хоча завжди слід пам’ятати, що вино може мати помилок. Це означає, що ви можете бути не впевнені, що помилка є у вині, вашій програмі чи обох, тому використовуйте вино лише для загального тестування.

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


7
вам не потрібно вказувати mingw32-binutilsі mingw32-runtimeтому, що це залежностіmingw32
henje

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

2
@henje бути ретельним, якщо ви не вкажете їх, вони можуть бути видалені автоматично менеджером пакунків при видаленні mingw32(позначені як "залежності". Я ви їх вказуєте, вони не будуть (позначені як "інструкція").
Матьє

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 з вашого менеджера пакунків. Потім компілюйте таким чином: замість того, щоб просто викликати gccвиклик 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 (C ++), binutils та GDB для Windows. Перейдіть за посиланням для завантаження на ellcc.org для попередньо складених бінарних файлів для декількох хостів Linux.


1
Оскільки я опублікував цю відповідь, я пішов трохи далі. У мене є проект, ELLCC, який пакує кланг та інші речі як ланцюжок інструментів перехресного компілятора. Я використовую його для компіляції 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.