gcc / g ++를 사용하여 Linux에서 Windows 용으로 컴파일하는 방법은 무엇입니까?


119

Linux에서 freeglut를 사용하여 C ++ (g ++)로 일부 효과를 작성했으며 다음으로 컴파일합니다.

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

그래서 g ++가 필요한 모든 것을 포함하는 정적 컴파일 된 Windows 실행 파일을 만들 수 있는지 궁금합니다.

나는 Windows가 없으므로 Linux에서 할 수 있다면 정말 멋질 것입니다. :)


4
@AndiDog, "첫 번째 무료 복용량", 맞습니다. 어쨌든, Windows 시스템에서 자동화 된 빌드 프로세스를 설정하는 동안 Linux 용으로 작업을 완료하고 작업 할 필요가 없습니다.
— P Shved 2010 년

Windows없이 Windows 소프트웨어를 어떻게 테스트 하시겠습니까? 와인을 사용하십니까?
— el.pescado

7
@ el.pescado, 구축 및 테스트는 완전히 다른 작업입니다. 전자에는 Windows가 필요하지 않습니다.
— P Shved 2010 년

답변:


92

mingw32는 Linux 용 패키지로 존재합니다. Windows 응용 프로그램을 교차 컴파일하고 연결할 수 있습니다. 여기 Code :: Blocks 포럼에 튜토리얼이 있습니다 . x86_64-w64-mingw32-gcc-win32예를 들어 명령이로 변경됩니다 .

예를 들어 우분투는 저장소에 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
데비안을 사용하는 경우 mingw32는 이미 저장소에 있으며 사전 컴파일 된 라이브러리도 거의 없습니다.
— liori

1
음, nongnu.org/mingw-cross-env에 크로스 컴파일 환경이 있습니다 . 예를 들어 freeglut를 포함합니다. 그러나 나는 이것을 사용하지 않았으므로 그것에 대해 묻지 마십시오.)
— AndiDog

4
mingw32의 "32"는 32 비트 바이너리 만 생성 할 수 있음을 의미합니까? 64 비트 바이너리도 생성 할 수있는 솔루션이 있습니까?
— bluenote10

1
bluenote10 : "x86_64-w64-mingw32-g ++"와 같이 x64 용으로 빌드되는 변형이 있습니다. 기본 "mingw32"는 가능할 수도 있고 불가능할 수도 있지만 이름으로 변형을 설치 / 사용하는 것은 쉽습니다. ar2015 : C ++ 11을 전혀 지원하지 않습니까? 아니면 문제에 대해 이야기하고 있습니까? 나는 우리가 말하는 것처럼 mingw로 빌드 할 프로젝트를 얻는 중이며 이것은 알아두면 좋은 정보가 될 것입니다. 다른 스레드는 C ++ 11을 지원함을 나타냅니다 (예 : stackoverflow.com/questions/16136142/… ). 물론 기꺼이 도와 드릴 수 있지만 별도의 게시물이 최선입니다.
— John P

1
이 주제에 대한 내용이 최근 변경 되었습니까?
— Montreal

30

Linux에서 Windows 용으로 컴파일하는 한 가지 옵션은 mingw를 사용하는 것입니다. 여기서 매우 유용한 튜토리얼을 찾았 습니다 .

Debian 기반 시스템에 mingw32를 설치하려면 다음 명령을 실행합니다.
sudo apt-get install mingw32

코드를 컴파일하려면 다음과 같이 사용할 수 있습니다.
i586-mingw32msvc-g++ -o myApp.exe myApp.cpp

때때로 Linux에서 직접 새 Windows 애플리케이션을 테스트하고 싶을 것입니다. 와인을 사용할 수 있지만 와인에는 벌레가있을 수 있다는 점을 항상 염두에 두어야합니다. 즉, 와인이나 프로그램 또는 둘 다에 버그가 있는지 확실하지 않을 수 있으므로 일반적인 테스트에만 와인을 사용하십시오.

와인을 설치하려면 다음을 실행하십시오.
sudo apt-get install wine


7
당신은 지정하지 않아도 mingw32-binutils및 mingw32-runtime그들은의 의존성 때문에mingw32
— henje

멋지다. cpp에는 매우 간단한 오류 ( void main(){}등 ...)가있었습니다. Windows에서는 컴파일되지만 mingw에서는 실패한 것 같습니다. 수정했습니다. 나는 또한 시도 i586-mingw32msvc-cpp하고 컴파일 될 것들과 같은 텍스트 파일을 생성했습니다. .. g ++ 하나가 작동했습니다, thx!
— Aquarius Power

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와 같은 크로스 컴파일러를 설치하십시오. 그런 다음 단순히 32 비트 Windows 또는 64 비트 Windows에 대한 호출을 gcc호출 i686-w64-mingw32-gcc하는 대신 다음과 같은 방법으로 컴파일 x86_64-w64-mingw32-gcc"하십시오. --static대상 시스템에 모든 라이브러리가 없을 수도 있으므로 옵션 을 사용합니다 .

당신이 포트란 같은 다른 언어를 컴파일하려면, 대신 -gcc에 -gfortran이전 명령한다.


7

Linux에서 mingw를 사용하여 C에서 Windows 실행 파일을 만들었는데 C ++도 작동 할 것이라고 생각합니다.

clang 및 기타 것들을 크로스 컴파일러 도구 체인으로 패키지화하는 프로젝트 ELLCC가 있습니다. Windows 용 clang (C ++), binutils 및 GDB를 컴파일하는 데 사용합니다. 여러 Linux 호스트 용으로 사전 컴파일 된 바이너리를 보려면 ellcc.org 의 다운로드 링크를 따르십시오 .


1
그 답변을 게시 한 이후로 조금 더 나아갔습니다. clang 및 기타 것들을 크로스 컴파일러 도구 체인으로 패키지화하는 프로젝트 ELLCC가 있습니다. Windows 용 clang (C ++), binutils 및 GDB를 컴파일하는 데 사용합니다. 여러 Linux 호스트 용으로 사전 컴파일 된 바이너리를 보려면 ellcc.org 의 다운로드 링크를 따르십시오 .
— Richard Pennington 2015 년

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 ....
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.