Linux'ta Windows için gcc / g ++ ile nasıl derlenir?


119

Linux üzerinde freeglut kullanarak C ++ (g ++) ile bazı efektler yazdım ve bunları

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

Bu yüzden, g ++ 'nın ihtiyaç duyulan her şeyi içeren statik derlenmiş Windows çalıştırılabilirleri oluşturmasının mümkün olup olmadığını merak ediyordum.

Benim Windows'um yok, bu yüzden Linux'ta yapabilseydim gerçekten harika olurdu :)


4
@AndiDog, "Ücretsiz ilk doz", doğru. Her neyse, Linux için tamamlanmış ve çalışır durumda olan bir Windows makinesinde otomatik derleme işlemi kurmak gereksizdir.
P Shved

Windows yazılımınızı Windows olmadan nasıl test edersiniz? Wine mı kullanıyorsunuz?
el.pescado

7
@ el.pescado, oluşturma ve test etme tamamen farklı görevlerdir. Birincisi için Windows gereksizdir.
P Shved

Yanıtlar:


92

mingw32, Linux için bir paket olarak mevcuttur. Windows uygulamalarını çapraz derleyebilir ve bunlarla bağlantı kurabilirsiniz. Code :: Blocks forumunda burada bir eğitim var . x86_64-w64-mingw32-gcc-win32Örneğin , komutun olarak değiştiğini unutmayın .

Örneğin Ubuntu, depolarında MinGW'ye sahiptir:

$ 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'ı kullanırsanız, mingw32, önceden derlenmiş birkaç kitaplıkla birlikte zaten depodadır.
liori

1
Eh, nongnu.org/mingw-cross-env adresinde bir çapraz derleme ortamı var . Örneğin, freeglut içerir. Ama bunu kullanmadım, bu yüzden bana sorma;)
AndiDog

4
Mingw32'deki "32" yalnızca 32 bitlik bir ikili oluşturabileceğim anlamına mı geliyor? 64 bitlik bir ikili oluşturmanın da bir çözümü var mı?
bluenote10

1
bluenote10: "x86_64-w64-mingw32-g ++" gibi x64 için oluşturulan varyantlar vardır. Temel "mingw32" yetenekli olabilir veya olmayabilir, ancak varyantları isme göre kurmak / kullanmak yeterince kolaydır. ar2015: C ++ 11'i hiç desteklemiyor mu yoksa onunla yaşadığınız bir sorundan mı bahsediyorsunuz? Mingw ile konuşurken bir proje oluşturmaya çalışıyorum ve bu bilmek iyi bir bilgi olacaktır. Diğer iş parçacıkları, c ++ 11'i desteklediğini gösterir (örneğin, stackoverflow.com/questions/16136142/… ). Elbette yardımcı olmaktan mutluluk duyarım, ancak bunun için ayrı bir gönderi en iyisi olacaktır.
John P

1
Bu konulardaki şeyler yakın zamanda değişti mi?
Montreal

30

Linux'ta Windows için derlemenin bir seçeneği mingw aracılığıyladır. Burada çok yararlı bir eğitim buldum .

Mingw32'yi Debian tabanlı sistemlere kurmak için aşağıdaki komutu çalıştırın:
sudo apt-get install mingw32

Kodunuzu derlemek için aşağıdaki gibi bir şey kullanabilirsiniz:
i586-mingw32msvc-g++ -o myApp.exe myApp.cpp

Bazen yeni Windows uygulamasını doğrudan Linux'ta test etmek isteyeceksiniz. Bunun için şarabı kullanabilirsiniz, ancak şarabın böcekleri olabileceğini her zaman aklınızda bulundurmalısınız. Bu, bir hatanın şarapta, programınızda veya her ikisinde olduğundan emin olamayacağınız anlamına gelir, bu nedenle yalnızca genel testler için wine kullanın.

Şarap yüklemek için şunu çalıştırın:
sudo apt-get install wine


7
belirtmenize gerek yok mingw32-binutilsve mingw32-runtimebağımlı oldukları içinmingw32
henje

harika, cpp'de çok basit hatalar var ( void main(){}vs ...), sanırım pencerelerde derliyor ama mingw'de başarısız oluyor, onları düzelttim. Ben de denedim i586-mingw32msvc-cppve derlenecek şeyler gibi bir metin dosyası oluşturdu lol .. g ++ biri çalıştı, teşekkürler!
Aquarius Power

2
@henje'nin eksiksiz olması için, bunları belirtmezseniz, kaldırma sırasında paket yöneticisi tarafından otomatik olarak kaldırılabilirler mingw32("bağımlılıklar" olarak işaretlenir. Bunları siz belirlerseniz, olmazlar ("manuel" olarak işaretlenir).
Matthieu

19

Önerilen yöntem Ubuntu 16.04'te bana hata verdi: E: mingw32 paketi bulunamıyor

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

Bu paketi Ubuntu'ya kurmak için lütfen aşağıdakileri kullanın:

sudo apt-get install mingw-w64

Yükledikten sonra kullanabilirsiniz:

x86_64-w64-mingw32-g++

Lütfen aklınızda bulundurun!

64 bit kullanım için: x86_64-w64-mingw32-g ++

32 bit kullanım için: i686-w64-mingw32-g ++


14

Paket yöneticinizden mingw64 gibi bir çapraz derleyici kurun. Ardından şu şekilde derleyin: yalnızca 32 bit Windows veya 64 bit Windows için gccçağrı i686-w64-mingw32-gccyapmak yerine x86_64-w64-mingw32-gcc". --staticHedef sistem tüm kitaplıklara sahip olmayabileceğinden , seçeneği de kullanırdım .

Fortran gibi başka bir dili derlemek istiyorsanız , önceki komutlarda -gccile değiştirin -gfortran.


7

C'de Windows çalıştırılabilirleri yapmak için Linux'ta mingw kullandım, C ++ 'nın da çalışacağından şüpheleniyorum.

Çapraz derleyici araç zinciri olarak clang ve diğer şeyleri paketleyen ELLCC adlı bir projem var. Windows için clang (C ++), binutils ve GDB'yi derlemek için kullanıyorum. Çeşitli Linux ana bilgisayarları için önceden derlenmiş ikili dosyalar için ellcc.org adresindeki indirme bağlantısını izleyin .


1
Bu cevabı gönderdiğimden beri biraz daha ileri gittim. Çapraz derleyici araç zinciri olarak clang ve diğer şeyleri paketleyen ELLCC adlı bir projem var. Windows için clang (C ++), binutils ve GDB'yi derlemek için kullanıyorum. Çeşitli Linux ana bilgisayarları için önceden derlenmiş ikili dosyalar için ellcc.org adresindeki indirme bağlantısını izleyin .
Richard Pennington

5

Gönderen: https://fedoraproject.org/wiki/MinGW/Tutorial

Fedora 17'den itibaren, win32 ve win64 hedefleri için kolayca ikili dosyalar oluşturmak (çapraz derlemek) mümkündür. Bu, mingw-w64 araç zinciri kullanılarak gerçekleştirilir: http://mingw-w64.sf.net/ . Bu araç zincirini kullanmak, aşağıdaki programlama dilleri için ikili dosyalar oluşturmanıza olanak tanır: C, C ++, Objective-C, Objective-C ++ ve Fortran.

"Windows çapraz derleyicisini kullanmak için ipuçları ve püf noktaları": https://fedoraproject.org/wiki/MinGW/Tips


3

Fedora için

sudo yum groupinstall -y "MinGW cross-compiler"

1
Tüm bu Fedora kullanıcıları için: burada harika bir öğretici var: fedoraproject.org/wiki/MinGW (yanlış bağlantı nedeniyle düzenlendi)
LemurPwned

Tam olarak aradığım şey! İle sudo dnf groupinstall ...de çalışır .
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.