Cygwin과 MinGW의 차이점은 무엇입니까?


657

C ++ 프로젝트를 크로스 플랫폼으로 만들고 싶습니다. Cygwin / MinGW 사용을 고려하고 있습니다. 그러나 그들 사이의 차이점은 무엇입니까?

또 다른 질문은 Cygwin / MinGW없이 시스템에서 바이너리를 실행할 수 있는지 여부입니다.

답변:


629

간단히 말하면 다음과 같습니다.

  • Cygwin에서 무언가를 컴파일하면 Cygwin위해 컴파일하고 있습니다 .

  • MinGW에서 무언가를 컴파일하면 Windows 용 으로 컴파일됩니다 .

Cygwin 소개

Cygwin의 목적은 Unix 기반 운영 체제가 제공하고 POSIX 표준에 의해 문서화 된 많은 작은 세부 사항을 모방하여 Unix 기반 애플리케이션을 Windows로 훨씬 쉽게 포팅하는 것 입니다. 응용 프로그램은 파이프, 유닉스 스타일 파일 및 디렉토리 액세스 등과 같은 유닉스 기능을 사용할 수 있으며 Cygwin으로 컴파일 하여 응용 프로그램 주위 의 호환성 계층 으로 작동하여 많은 유닉스 관련 패러다임이 계속 사용됩니다.

소프트웨어를 배포 할 때 수신자는 Cygwin 런타임 환경 (파일에서 제공)과 함께 소프트웨어를 실행해야합니다 cygwin1.dll. 소프트웨어와 함께 배포 할 수 있지만 소프트웨어는 해당 오픈 소스 라이센스를 준수해야합니다. 소프트웨어와 소프트웨어를 연결하고 dll을 개별적으로 배포하는 경우에도 오픈 소스 라이센스를 유지해야 할 수도 있습니다.

MinGW 소개

MinGW는 단순히 GCC, Make, Bash 등과 같은 GNU 컴파일러 도구의 Windows 포트가되는 것을 목표로합니다. 유닉스와의 모방 또는 포괄적 인 호환성을 제공하려고 시도하지 않고 대신 GCC (GNU 컴파일러) 및 소수의 다른 도구를 사용하는 데 필요한 최소 환경을 제공합니다. Windows에서. Cygwin과 같은 Unix 에뮬레이션 레이어는 없지만 Windows에서 실행할 수 있도록 응용 프로그램을 구체적으로 프로그래밍해야하므로 표준 Unix 환경에서 실행되도록 만들면 응용 프로그램이 크게 변경 될 수 있습니다. 앞에서 언급 한 것과 같은 Unix 관련 기능을 사용합니다. 기본적으로 MinGW의 GCC로 컴파일 된 코드는 .exe 및 .dll 파일을 포함한 기본 Windows X86 대상으로 컴파일되지만 기본적으로 GNU 컴파일러 도구 제품군을 사용하기 때문에 올바른 설정으로 크로스 컴파일 할 수도 있습니다.

MinGW는 본질적으로 Microsoft Visual C ++ 컴파일러 및 관련 링크 / 만들기 도구 의 대안 입니다. 경우에 따라 MinGW를 사용하여 Microsoft Visual C ++로 컴파일 할 목적으로 올바른 라이브러리를 사용하거나 경우에 따라 다른 수정 사항을 컴파일 할 수 있습니다.

MinGW에는 Windows 운영 체제와의 상호 작용을위한 몇 가지 기본 표준 라이브러리가 포함되어 있지만 GNU 컴파일러 컬렉션에 포함 된 일반 표준 라이브러리와 마찬가지로 사용자가 만든 소프트웨어에 대한 라이센스 제한이 없습니다.

사소한 소프트웨어 응용 프로그램의 경우, 크로스 플랫폼 프레임 워크를 사용하지 않으면 크로스 플랫폼으로 만드는 것이 상당히 어려울 수 있습니다. 필자가이 글을 썼을 때 Qt 프레임 워크 는이 목적에 가장 인기있는 것으로, Windows를 포함한 운영 체제에서 작동하는 그래픽 응용 프로그램을 만들 수 있지만 다른 옵션도 있습니다. 처음부터 이러한 프레임 워크를 사용하는 경우 다른 플랫폼으로 이식 할 때 두통을 줄일 수있을뿐만 아니라 모든 플랫폼에서 동일한 그래픽 위젯 (창, 메뉴 및 컨트롤)을 사용할 수 있습니다. GUI 앱으로 사용자에게 기본적으로 표시되도록합니다.


43
MinGW와 함께 제공되는 bash는 기본 Windows 프로그램이 아닙니다. Cygwin DLL의 포크 인 MSYS DLL에 따라 다릅니다. MinGW / MSYS와 함께 제공되는 다른 많은 유닉스 유틸리티에도 동일합니다. MinGW gcc는 실제로 네이티브 프로그램입니다. Make는 기본 버전과 MSYS 버전으로 제공됩니다.
ak2

6
속도면에서 차이가 있습니까?
EKanadily 2019

6
속도 차이는 대부분의 상황 에서 무시할 수 있습니다 . cygwin 호환성 레이어가 제공하는 추가 추상화 수준이 속도를 늦추는 정도에 차이가 있습니다. I / O와 같은 것들에 상당한 영향을 줄 수 있습니다. 예를 들어 오랜 시간 동안 Git 은 cygwin의 Windows에서만 실행되었으며 그로 인해 약간 느 렸습니다. 프레임 워크를 사용하여 코드를 작성하면 어쨌든 일부 속도가 느려질 수있는 추상화 계층이기도합니다.
thomasrutter

28
cygwin 용으로 컴파일 된 코드는 여전히 네이티브 코드입니다 .Java와 같은 인터프리터를 실행할 필요는 없습니다. 디스크 / 파일과 같은 특정 OS 기능과 상호 작용해야 할 때 다른 계층을 거치는 것입니다.
thomasrutter

4
cygwin 용인지 아닌지에 따라 코드를 다르게 작성해야하기 때문에 일반적으로 비교할 수 없습니다. "hello world"와 같은 작고 간단한 소프트웨어의 경우 cygwin과 동등한 것은 cygwin 런타임 라이브러리로 인해 더 커질 것입니다. cygwin 런타임 라이브러리의 크기를 계산하지 않으면 cygwin 버전은 일반적으로 작지만 실제로는 소프트웨어와 함께 라이브러리가 항상 제공되어야하기 때문에 잘못된 수치입니다. 즉, 사소하지 않은 라이브러리 / 프레임 워크를 사용하면 더 의존 할 것입니다.
thomasrutter

311

Cygwin은 Windows에서 완전한 UNIX / POSIX 환경을 작성하려는 시도입니다. 이를 위해 다양한 DLL을 사용합니다. 이 DLL은 GPLv3 +에 포함되지만 라이센스에는 예외가 있습니다. 파생 작업이 GPLv3 +에 의해 적용되지 않는 가 . MinGW는 이러한 DLL에 의존하지 않고 Windows 실행 파일을 만들 수있는 C / C ++ 컴파일러 제품군입니다. 일반적인 Microsoft Windows 설치의 일부인 일반 MSVC 런타임 만 필요합니다.

MSYS 라는 MinGW로 컴파일 된 작은 UNIX / POSIX 환경을 얻을 수도 있습니다 . Cygwin의 모든 기능과 가까운 곳에는 없지만 MinGW를 사용하려는 프로그래머에게 이상적입니다.


59
그러나 무료 비 GPL 소프트웨어를 출시하려면? 죄송합니다. 저는 GPL 팬이 아닙니다.

19
@Dan MinGW가 사용하는 런타임을 재배포 할 필요가 없습니다. Windows의 일부입니다.

14
@ ak2 : 사실이지만 오해의 소지가 있습니다. cygwyn gcc + cygwin 환경은 (GPL) cygwin dll에 연결된 바이너리를 생성하도록 기본 설정되어 있습니다. mingw + msys는 기본적으로 플랫폼 C lib에 링크 된 바이너리를 생성합니다.
Sean McMillan 2016 년

4
@DanMoulding Microsoft 팬이 아닌 경우, Windows를 위해 처음 개발할 때 이러한 감정을 무시해야합니다. ;-)
Arda Xi

14
@anon "그러나 무료 비 GPL 소프트웨어를 출시하려면?"cygwin은 라이센스 조항에서 다른 예외 (GPL 이외의) 오픈 소스 라이센스로 소프트웨어와 연결된 무료 소프트웨어를 배포 할 수있는 특별 예외 조항이 있습니다. 여기에서 "오픈 소스 라이센스 예외"를 참조하십시오. cygwin.com/licensing.html
steve cook

138

다른 답변에 추가하기 위해 Cygwin은 MinGW 라이브러리 및 헤더와 함께 제공되며 gcc와 함께 -mno-cygwin 플래그를 사용하여 cygwin1.dll에 링크하지 않고 컴파일 할 수 있습니다. 나는 일반 MinGW와 MSYS를 사용하는 것을 선호합니다.


31
cygwin 1.7.6에서는 더 이상 작동하지 않습니다. gcc : -mno-cygwin 플래그가 제거되었습니다. mingw 대상 교차 컴파일러를 사용하십시오.
sigjuice

2
@sigjuice : 사실이지만 오래된 -mno-cygwin 플래그는 여전히 GCC 3.x에서 작동합니다.gcc-3 -mno-cygwin
Amro

1
cygwin 호스트에서 mingw 대상으로 컴파일하려면 mingw의 공식 사이트에서 mingw 라이브러리를 다운로드해야한다는 것을 의미합니까? 아니면 Cygwin의 패키지 시스템에서이 라이브러리를 다운로드 할 수 있습니까?
CMCDragonkai

5
@CMCDragonkai 설치 유틸리티를 실행하고 찾은 후 Cygwin 사이트에서 mingw 호환 컴파일러를 얻을 수 있습니다. 따라서 gcc가 더 이상 mingw 호환 코드를 생성하지 않더라도 Cygwin 내에서 "mingw-gcc"(전체 이름이 아님)를 실행하여 mingw 컴파일러가 msys에서 실행하는 것과 동일한 종류의 실행 파일을 만들 수 있습니다.
카디프 우주 남자

9
카디프의 유용한 답변을 수정하기 위해 Cygwin의 MinGW 패키지 및 명령의 이름이 다소 모호합니다. MinGW-64를 설치하려면 ( 요즘 항상 원하는대로 ) mingw64-x86_64-gcc-coreCygwin 패키지를 설치하십시오 . MinGW-64는 어색한 이름의 x86_64-w64-mingw32-gcc명령 으로 사용할 수 있습니다 . 신 이시여, 누군가 이미이 피의 것들의 이름을 통일하십시오.
Cecil Curry 5

60

Wikipedia는 여기 에서 비교를 수행 합니다 .

Cygwin 웹 사이트에서 :

  • Cygwin은 Linux 용 Windows 환경입니다. 두 부분으로 구성되어 있습니다. DLL (cygwin1.dll)은 실질적인 Linux API 기능을 제공하는 Linux API 에뮬레이션 계층의 역할을합니다.
  • Linux 모양과 느낌을 제공하는 도구 모음입니다.

Mingw 웹 사이트에서 :

MinGW ( "최소 Windows 용 최소 GNU")는 타사 C 런타임 DLL에 의존하지 않는 기본 Windows 프로그램을 생성 할 수 있도록 GNU 도구 세트와 결합 된 자유롭게 사용 가능하고 자유롭게 배포 가능한 Windows 고유 헤더 파일 및 가져 오기 라이브러리 모음입니다.


47

Cygwin은 DLL cygwin.dll (또는 DLL 세트)을 사용하여 Windows에서 POSIX와 유사한 런타임을 제공합니다.

MinGW는 기본 Win32 응용 프로그램으로 컴파일됩니다.

Cygwin으로 무언가를 빌드하는 경우, 설치하는 시스템에는 Cygwin DLL도 필요합니다. MinGW 응용 프로그램에는 특별한 런타임이 필요하지 않습니다.


42

Cygwin과 MinGW의 차이점을 이해하려면 다음 질문에 대답하십시오.


질문 # 1 : 소스 코드를 한 번 작성하고 한 번 컴파일 한 다음 모든 플랫폼 (예 : Windows, Linux 및 Mac OS X…)에서 실행하는 응용 프로그램을 만들고 싶습니다.

답변 # 1 : 소스 코드를 JAVA로 작성하십시오. 소스 코드를 한 번 컴파일하고 어디서나 실행하십시오.


질문 # 2 : 소스 코드를 한 번 작성하는 응용 프로그램을 만들고 싶지만 플랫폼 (예 : Windows, Linux 및 Mac OS X…)의 소스 코드를 별도로 컴파일해도 문제가 없습니다.

답변 # 2 : 소스 코드를 C 또는 C ++로 작성하십시오. 표준 헤더 파일 만 사용하십시오. 모든 플랫폼에 적합한 컴파일러를 사용하십시오 (예 : Windows 용 Visual Studio, Linux 용 GCC 및 Mac 용 XCode). 모든 플랫폼에서 소스 코드를 성공적으로 컴파일하기 위해 고급 프로그래밍 기능을 사용해서는 안됩니다. C 또는 C ++ 표준 클래스 또는 함수를 사용하지 않으면 소스 코드가 다른 플랫폼에서 컴파일되지 않습니다.


질문 # 3 : 질문 # 2에 대한 답변으로, 각 플랫폼마다 다른 컴파일러를 사용하는 것이 어렵습니다. 크로스 플랫폼 컴파일러가 있습니까?

답변 # 3 : 예, GCC 컴파일러를 사용하십시오. 크로스 플랫폼 컴파일러입니다. Windows에서 소스 코드를 컴파일하려면 Windows 용 GCC 컴파일러를 제공하고 원시 Windows 프로그램으로 소스 코드를 컴파일 하는 MinGW 를 사용 하십시오. 모든 플랫폼에서 소스 코드를 성공적으로 컴파일하기 위해 Windows API와 같은 고급 프로그래밍 기능을 사용하지 마십시오. Windows API 함수를 사용하면 소스 코드가 다른 플랫폼에서 컴파일되지 않습니다.


질문 # 4 : C 또는 C ++ 표준 헤더 파일은 멀티 스레딩과 같은 고급 프로그래밍 기능을 제공하지 않습니다. 어떡해?

답변 # 4 : POSIX (Portable Operating System Interface [UNIX 용]) 표준을 사용해야합니다. 많은 고급 프로그래밍 기능과 도구를 제공합니다. 많은 운영 체제가 POSIX와 완전히 또는 부분적으로 호환됩니다 (Mac OS X, Solaris, BSD / OS 등). 공식적으로 POSIX 호환으로 인증되지 않은 일부 운영 체제는 Linux, FreeBSD, OpenSolaris 및 ...와 같은 대부분을 준수합니다. Cygwin 은 Microsoft Windows를위한 POSIX 호환 개발 및 런타임 환경을 제공합니다.


그러므로:

Windows에서 GCC 크로스 플랫폼 컴파일러를 활용하려면 MinGW를 사용하십시오.

Windows에서 POSIX 표준 고급 프로그래밍 기능 및 도구를 이용하려면 Cygwin을 사용하십시오.


4
당신의 작은 자주 묻는 질문에 대해 : 1) 당신의 권리, 어디서나 실행되고 컴파일 할 필요가없는 경우 java와 같은 것을 선택하십시오 (python, perl, ruby ​​및 나머지 스크립트 언어를 잊지 마십시오) 2) C의 모든 컴파일러가 C를 매우 잘 지원하기 때문에 C의 경우 다소 잘못되었습니다. 3) win32 api를 계속 사용할 수 있지만 이식성 계층으로 래핑해야하므로 디자인 문제 일뿐입니다.
Coyote21

1
4) 이것은 POSIX가 다른 API 일뿐이므로 POSIX가 다른 API이기 때문에 위의 이유 때문에 완전히 잘못되었습니다 .POIX를 너무 많이 방어하면 Unice조차도 동일한 POSIX 세트를 구현할 필요가 없다는 것을 알아야합니다. 당신은 그걸 다루나요? 실시간 POSIX API가 떠 오릅니다. 그리고 그것은 창에서 아무것도 POSIX가 필요하지 않기 때문에 완전히 가짜와 잘못된 결론을 내릴 수 있습니다 .Win32 API를 사용할 수 있습니다. 또는 Qt, GTK 및 WxWidgets가 플랫폼 간 방법을 찾았다 고 생각합니다. 모두 Windows에서 cygwin을 사용해야한다고 생각합니다. 귀하의 답변에 -1 투표하십시오.
Coyote21

4
나는 당신의 주장을 이해하지 못합니다, @ Coyote21. POSIX가 크로스 플랫폼 개발에 적합하지 않다고 말하고 있습니까? 여러 플랫폼에서 C / C ++로 코드를 작성하는 유일한 방법은 지원하려는 각 플랫폼마다 고유 한 호환성 계층을 작성하는 것입니까? POSIX로 시작하라는 제안에는 잘못된 것이 없습니다. 얼마나 멀리 갈 수 있는지, 광범위한 호환성 레이어 솔루션이 필요한지 확인해야합니다. 큰 호환성 레이어는 표준이 아닙니다. 그렇지 않으면 POSIX가 완전히 실패했다고 주장하는 것입니다.
David Gladfelter

멀티 스레딩은 MinGW에서도 POSIX 계층을 통해 구현됩니다.
Alexander Shishenko

1
"모든 플랫폼에서 소스 코드를 성공적으로 컴파일하기 위해 고급 프로그래밍 기능을 사용해서는 안됩니다." "고급 프로그래밍 기능"의 의미를 명확히해야합니다. 나중의 줄을 기반으로, 내 생각에 실제로 플랫폼 별 기능을 의미한다고 생각 합니다. 현대 언어 기능을 의미한다면, "모든 [주요 플랫폼]"에 대해 유능한 컴파일러가 존재하기 때문에 컴파일러 나 라이브러리가 여전히 뒤쳐지는 기능을 제공하기 위해 기능을 박탈해서는 안됩니다. 괜찮은 컴파일러, 표준 C / ++ 및 크로스 플랫폼 라이브러리를 사용하면 훨씬 발전 할 수 있습니다 .
underscore_d

34

C 프로그램을 이식한다는 관점에서이를 이해하는 좋은 방법은 예를 들어 보는 것입니다.

#include <sys/stat.h>
#include <stdlib.h>

int main(void)
{
   struct stat stbuf;
   stat("c:foo.txt", &stbuf);
   system("command");
   printf("Hello, World\n");
   return 0;
}

우리가 바뀌면 stat 하면 _statMicrosoft Visual C를 사용하여이 프로그램을 컴파일 할 수 있습니다. 또한 MinGW 및 Cygwin을 사용하여이 프로그램을 컴파일 할 수도 있습니다.

Microsoft Visual C에서 프로그램은 MSVC 재배포 가능 런타임 라이브러리에 연결 됩니다. mxvcrtnn.dll여기서 nn일부 버전 접미사가 있습니다. 이 프로그램을 배송하려면 해당 DLL을 포함시켜야합니다. DLL이 제공하는 _stat, system하고 printf. 또한 런타임을 정적으로 연결하는 옵션도 있습니다.

MinGW에서 프로그램은 msvcrt.dll Windows에 포함 된 문서화되지 않은 내부 라이브러리이며 응용 프로그램 사용에 제한이없는로 연결됩니다. 이 라이브러리는 본질적으로 Windows 자체에서 사용하기 위해 MS Visual C의 재배포 가능 런타임 라이브러리의 포크입니다.

이 두 가지 모두에서 프로그램은 비슷한 동작을합니다.

  • stat함수는 유용한 권한이나 inode 번호와 같은 매우 제한된 정보를 반환합니다.
  • 경로 c:file.txt는 drive와 연관된 현재 작업 디렉토리에 따라 해결됩니다 c:.
  • systemcmd.exe /c외부 명령을 실행하는 데 사용 합니다.

Cygwin에서 프로그램을 컴파일 할 수도 있습니다. MS Visual C에서 사용하는 재배포 가능 런타임과 마찬가지로 Cygwin 프로그램은 Cygwin의 런타임 라이브러리에 연결됩니다.cygwin1.dll (Cygwin 정상) 및 cyggcc_s-1.dll(GCC 런타임 지원). Cygwin은 현재 LGPL에 속하므로 GPL 호환 무료 소프트웨어가 아니더라도 프로그램과 함께 패키지하여 프로그램을 제공 할 수 있습니다.

Cygwin에서 라이브러리 기능은 다르게 작동합니다.

  • 그만큼 stat 함수는 기능이 풍부하여 대부분의 필드에서 의미있는 값을 반환합니다.
  • 경로 c:file.txt는 드라이브 문자 참조를 포함하는 것으로 전혀 이해되지 않습니다.c: 뒤에 슬래시가 없기 되지 않습니다. 콜론은 이름의 일부로 간주되며 어떻게 든 엉망이됩니다. Cygwin에는 볼륨 또는 드라이브에 대한 상대 경로 개념이 없으며 "현재 기록 된 드라이브"개념이 없으며 드라이브 당 현재 작업 디렉토리가 없습니다.
  • system기능은 사용하려고 /bin/sh -c인터프리터. Cygwin은 /실행 파일의 위치에 따라 경로를 확인하고 sh.exe프로그램이 실행 파일과 같은 위치에 있을 것으로 예상합니다 .

Cygwin과 MinGW 모두 Win32 기능을 사용할 수 있습니다. MessageBox또는 로 전화를 걸려면 CreateProcess할 수 있습니다. gcc -mwindowsMinGW 및 Cygwin에서을 사용하여 콘솔 창을 필요로하지 않는 프로그램을 쉽게 만들 수도 있습니다 .

Cygwin은 POSIX가 아닙니다. Windows API에 대한 액세스를 제공 할뿐만 아니라 일부 Microsoft C 함수 ( msvcrt.dll재배포 가능 msvcrtnn.dll런타임에 있는 것)의 자체 구현도 제공합니다 . 예를 들면 다음 spawn*과 같은 함수 군이 있습니다 spawnvp. Cygwin 대신 forkexecCygwin 에서 사용하는 것이 좋습니다 fork. 개념이없는 Windows 프로세스 생성 모델에 더 잘 매핑되기 때문입니다 .

그러므로:

  • Cygwin 프로그램은 라이브러리 반주가 필요하다는 이유로 MS Visual C 프로그램보다 "기본"입니다. Windows에서 프로그래밍 언어 구현은 자체 런타임, 심지어 C 언어 구현도 제공해야합니다. Windows에는 공용으로 사용할 "libc"가 없습니다.

  • MinGW에 타사 DLL이 필요하지 않다는 사실은 실제로 단점입니다. 문서화되지 않은 Visual C 런타임의 Windows 내부 포크에 따라 다릅니다. MinGW는 GPL 시스템 라이브러리 예외가에 적용되기 때문에이 작업을 수행합니다. msvcrt.dll즉, GPL 버전의 프로그램을 MinGW로 컴파일하고 재배포 할 수 있습니다.

  • msvcrt.dllCygwin은 POSIX 프로그램에 비해 훨씬 광범위하고 깊이있는 POSIX 지원으로 POSIX 프로그램 포팅에있어 최고의 환경입니다. 현재 LGPL에 속하므로 모든 종류의 라이센스 (오픈 소스 또는 비공개 소스)가있는 응용 프로그램을 재배포 할 수 있습니다. Cygwin은 VT100 에뮬레이션 및 termiosMicrosoft 콘솔과 함께 작동합니다! tcsetattrVT100 코드를 사용 하여 원시 모드를 설정 하고 커서를 제어하기 위해 POSIX 응용 프로그램 은 cmd.exe창 에서 바로 작동합니다 . 최종 사용자와 관련하여 콘솔을 제어하기 위해 Win32 호출을 수행하는 기본 콘솔 앱입니다.

하나:

  • Cygwin은 기본 Windows 개발 도구로서 Windows와는 다른 경로 처리와 같은 하드 코딩 된 경로 /bin/sh및 기타 문제 에 의존 합니다. 이러한 차이점은 Cygwin 프로그램을 "비 기본"으로 만드는 것입니다. 프로그램이 경로를 인수로 사용하거나 대화 상자에서 입력하면 Windows 사용자는 해당 경로가 다른 Windows 프로그램에서와 동일한 방식으로 작동 할 것으로 기대합니다. 그래도 작동하지 않으면 문제입니다.

플러그 : LGPL 발표 직후, Cygnal (Cygwin Native Application Library) 프로젝트를 시작 하여 Cygwin DLL 포크를 제공하여 이러한 문제를 해결했습니다. Cygwin에서 프로그램을 개발 한 다음 cygwin1.dll재 컴파일하지 않고 Cygnal 버전으로 배포 할 수 있습니다 . 이 라이브러리가 향상됨에 따라 MinGW가 점차 없어 질 것입니다.

Cygnal이 경로 처리 문제를 해결하면 Cygnal과 함께 Windows 응용 프로그램으로 제공 될 때 Windows 경로와 작동하고 Cygwin /usr/bin아래에 설치 될 때 Cygwin 경로와 완벽하게 작동하는 단일 실행 파일을 개발할 수 있습니다 . Cygwin에서 실행 파일은 다음과 같은 경로로 투명하게 작동 /cygdrive/c/Users/bob합니다. Cygnal 버전의에 대해 연결하는 기본 배포에서는 cygwin1.dll해당 경로가 의미가 없지만 이해 c:foo.txt합니다.


2
훌륭한 답변입니다. 3 가지 환경 각각에서 동일한 코드 조각이 컴파일, 링크 및 실행될 때 발생하는 상황을 보여주는 것이 핵심이며 차이점을 명확히합니다.
drlolly

@Kaz 어떻게 개발이 진행되고 있습니까? 반복적으로 들리지만 적어도 1 년 전부터는 죽은 것 같습니다. 사람들이 도와주고 참여할 수 있도록 GitHub를 사용하지 않는 이유는 무엇입니까?
not2qubit

2
@ not2qubit 내 프로젝트가 내가 직접 제어하는 ​​자체 서버에서 호스팅 될 때 프로젝트를보다 잘 제어 할 수 있다고 생각합니다. git을 사용하고 있습니다. 저장소를 가져올 수 있습니다. Linus Torvalds가 설계 한대로 전자 메일을 통해 풀 요청을 수락 할 수 있습니다. 또한 관리자 수준 기여자가 된 사람에게 커밋 권한이있는 계정을 제공 할 수도 있습니다. Cygnal은 잘 작동합니다. TXR 언어의 새로운 버전의 Windows 버전에 정기적으로 번들하고 있습니다. 2019
Kaz

@ not2qubit Cygnal 아젠다의 17 가지 문제는 모두 해결되었습니다. 아무도 새로운 요구 사항을 제안하지 않았으며, 그 요구 사항이 처리되는 방식에 대해 불평하지 않았습니다. 따라서 새로운 시그윈에 기반을 두는 것 외에 다른 개발이 필요하지 않습니다.
Kaz

27

위키 백과의 말 :

MinGW의 버전 1.3.3에서 분기되었습니다 Cygwin. 모두 있지만 Cygwin 및이 MinGW포트에 사용할 수있는 UNIX소프트웨어 Windows, 서로 다른 접근 방식을 가지고 : Cygwin목표는 완전한 제공하기 위해 POSIX layer 여러 시스템 호출 및에 존재하는 라이브러리를 에뮬레이션 제공하는 Linux, UNIX그리고 BSD변형. 은 POSIX layer 위에서 실행 Windows필요한 호환성을 위해 성능을 희생. 따라서이 방법을 사용하려면 Windows프로그램 Cygwin과 함께 프로그램과 함께 배포해야하는 카피 레프트 호환성 라이브러리 위에서 실행되도록 작성된 프로그램 이 필요 합니다 source code. MinGWdirect를 통해 기본 기능과 성능을 제공하는 것을 목표로합니다 Windows API calls. 같지 않은 Cygwin ,MinGW호환성 계층이 필요하지 않으므로 DLL프로그램을 배포 할 필요가 없습니다 source code.

MinGW에 의존 하기 때문에 Windows API calls전체를 제공 할 수 없습니다 POSIX API. 로 컴파일 UNIX applications할 수있는 일부를 컴파일 할 수 없습니다 Cygwin. 특히이 필요로하는 응용 프로그램에 적용 POSIX등의 기능 fork(), mmap()또는 ioctl()기대하는 사람들이에서 실행하고를 POSIX environment. 사용하여 작성된 응용 프로그램 cross-platform library자체에 이식되어 그 MinGW와 같은, 등이 SDL, wxWidgets, Qt, 또는 GTK+에서, 일반적으로 쉽게 컴파일 MinGW그들이에서하는 것처럼 Cygwin.

컴퓨터의 레지스트리 나 파일에 항목을 남기지 않고 이동식 미디어에로드 할 수있는 소규모의 독립된 환경을 조합 MinGW하여 MSYS제공합니다. Cygwin휴대용은 비슷한 기능을 제공합니다. 더 많은 기능을 제공함으로써 Cygwin 설치 및 유지 관리가 더욱 복잡해집니다.

그것은 할 수도 있습니다 cross-compile Windows applicationsMinGW-GCC under POSIX systems. 이는 개발자가 없이 MSYS실행되는 소프트웨어를 컴파일하기 위해 Windows를 설치할 필요가 없음을 의미합니다 .WindowsCygwin


2
확실히 "설치 및 유지 관리가 더 복잡 하지 않습니다 " ! 를 사용하여 apt-cyg더욱 쉽게 APT에서의 WSL를 사용하는 것보다 아마도입니다한다.
not2qubit

14

Windows에서 Unix 응용 프로그램을 컴파일 할 수 있도록 설계된 AT & T의 U / Win 소프트웨어 (과거 버전-2012-08-06; Eclipse Public License, 버전 1.0 사용)를 간과하지 마십시오 .

Cygwin과 마찬가지로 그들은 라이브러리에 대해 실행해야합니다. 그들의 경우에 POSIX.DLL. AT & T 직원들은 훌륭한 엔지니어들 (ksh와 dot 을 가져간 동일한 그룹 )이며 그들의 물건은 체크 아웃 할 가치가 있습니다.


4
와우, 그들은 나쁜 웹 페이지입니다. 마침내 www2.research.att.com/sw/download 에서 다운로드 링크를 찾을 수 있었지만 프로젝트에 대한 온라인 설명서 나 정보는 없습니다.
Fantius

1
정보는 유용하지만, 이것이이 질문보다는 MingW 또는 Cygwin의 대안에 대한 질문에 대한 답이 될 수 있다고 생각합니다.
Vivek

12

다른 답변이 이미 목표를 달성했습니다. 빨리 잡기 위해 그림을 추가하고 싶습니다.

여기에 이미지 설명을 입력하십시오


11

Cygwin은 전체 POSIX 환경을 에뮬레이션하지만 MinGW는 컴파일 전용의 최소한의 도구 세트입니다 (기본 Win 응용 프로그램을 컴파일합니다).

Windows에서는 VS를, Linux / Unices에서는 GCC를 사용하는 것이 좋습니다. 대부분의 오픈 소스 프로젝트가이를 수행합니다 (예 : Firefox 또는 Python).


여기서 "대부분"은 의미가없는 족제비 단어처럼 보입니다. 특히 2 개의 예만 있고 통계는 없습니다. 많은 FOSS 프로젝트가 VS 프로젝트 파일을 토큰 제스처로 던집니다. 더 정확하다고 생각합니다. 그러나 과거 경험이 필요하다면 언어 표준이 발전함에 따라 VS가 상당히 뒤쳐지는 경향이 있으므로 GCC 또는 Clang이 일반적으로 더 안전합니다.
밑줄 _d

그것은 2009 년의 해답입니다. 요즘에는 GCC가 더 어둡게 보입니다. "대부분"에 관해서는, 충격으로 측정하면 Firefox와 Chrome만으로도 다른 사용자보다 많은 사용자가 있습니다.
vartec

2
내가 대답했을 때부터 변경된 것은 지금 clang 실행 가능한 크로스 플랫폼 솔루션이라는 것입니다.
vartec

9

유틸리티 동작은 둘 사이에서 실제로 다를 수 있습니다.

예를 들어 Cygwin tar는 fork ()가 mingw 버전이 지원하지 않는 DLL에서 지원되기 때문에 포크 할 수 있습니다. 이것은 소스에서 mysql을 컴파일하려고 할 때 발생하는 문제입니다.


그렇기 때문에 MSYS2와 같은 본격적인 MinGW 가능 환경은 Cygwin 또는 기타 POSIX 호환 레이어를 제공하여 구축 중에 필요한 툴체인의 저수준 너트와 볼트를 제공합니다. 그런 다음 실제 컴파일 및 링크는 완전히 고유 한 MinGW 컴파일러에 맡겨집니다. MSYS2는 정말 깔끔합니다.
underscore_d 1

9

상용 / 독점 / 비 오픈 소스 응용 프로그램에서 Cygwin을 사용하려면 Red Hat 의 " 라이센스 구매 "를 위해 수만 달러를 지불해야합니다 . 이는 상당한 비용으로 표준 라이센스 조건 을 무효화합니다 . 구글 "cygwin 라이센스 비용"과 처음 몇 가지 결과를 참조하십시오.

mingw의 경우 그러한 비용이 발생하지 않으며 라이센스 (PD, BSD, MIT)는 매우 허용됩니다. 대부분에서 당신은 할 수있다 mingw64-TDM을 사용하는 경우 winpthreads이 라이센스가 필요합니다 같은 응용 프로그램과 함께 라이센스 세부 사항을 제공 할 것으로 예상된다.

Izzy Helianthus 덕분에 편집 : Cygwin의 winsup 서브 디렉토리에있는 API 라이브러리 가 이제 전체 GPL과는 달리 LGPL 로 배포 되므로 상업용 라이센스를 더 이상 사용할 수 없거나 필요하지 않습니다 .


2
Redhat 웹 사이트의 업데이트 ( "라이센스 매입"링크- '2016 년 3 월 1 일 현재 Red Hat은 더 이상 Cygwin 용 상업용 구매 라이센스를 판매하지 않습니다. Cygwin이 현재 GNU Lesser로 배포되기 때문에 더 이상 상업용 라이센스가 필요하지 않습니다 GPL (LGPL). '> Cygwin 웹 사이트에서 소스 코드의 winsup 서브 디렉토리에있는 Cygwin ™ API 라이브러리는 GNU LGPL (Lesser Public Public License) 버전 3 이상에서 다룹니다. LGPLv3의 요구 사항에 대한 자세한 내용은 는 GNU 약소 일반 공중 사용 허가서 (LGPL)를 읽어 보시기 바랍니다.
이지 Helianthus

6

Cygwin은 본격적인 Linux와 같은 플랫폼을 제공하도록 설계된 광범위한 도구 세트를 포함하여 Windows에보다 완벽한 POSIX 환경을 제공하도록 설계되었습니다. 비교,는 MinGW와 MSYS는 경량을 제공, 미니멀 POSIX 같은 같은 단지 더 중요한 도구 층 gccbash가능합니다. MinGW의보다 미니멀 한 접근 방식으로 Cygwin이 제공하는 POSIX API 적용 범위를 제공하지 않으므로 Cygwin에서 컴파일 할 수있는 특정 프로그램을 빌드 할 수 없습니다.

Cygwin 툴체인은이 둘에 의해 생성 된 코드 측면에서 대규모 런타임 라이브러리에 대한 동적 링크에 의존하는 cygwin1.dll반면, MinGW 툴체인은 코드를 Windows 네이티브 C 라이브러리에 동적으로 링크하고 바이너리의 msvcrt.dll일부에 정적으로 링크하는 바이너리로 코드를 컴파일합니다 glibc. Cygwin 실행 파일은 더 작지만 별도의 재배포 가능 DLL이 필요하지만, MinGW 바이너리는 독립형으로 제공 될 수 있지만 더 큰 경향이 있습니다.

Cygwin 기반 프로그램을 실행하려면 별도의 DLL이 필요하다는 사실은 라이센스 제한으로 이어집니다. Cygwin 런타임 라이브러리는 OSI 호환 라이센스가있는 애플리케이션에 대한 링크 예외를 제외하고 GPLv3에 따라 라이센스가 부여되므로 Cygwin을 중심으로 비공개 소스 애플리케이션을 구축하려는 개발자는 Red Hat으로부터 상용 라이센스를 취득해야합니다. 반면 MinGW 코드는 헤더와 라이브러리가 허가되어 있으므로 오픈 소스 및 폐쇄 소스 응용 프로그램 모두에서 사용할 수 있습니다.


3

Cygwin 은 Unix와 유사한 환경 및 Microsoft Windows 용 명령 줄 인터페이스입니다.

Mingw 는 GCC (GNU Compiler Collection)의 Microsoft 소프트웨어 용 기본 소프트웨어 포트이며 Windows API 용 무료 배포 가능 가져 오기 라이브러리 및 헤더 파일 세트와 함께 제공됩니다. MinGW를 통해 개발자는 기본 Microsoft Windows 응용 프로그램을 만들 수 있습니다.

필요한 모든 라이브러리 (DLL)가있는 경우 환경 mingw없이 생성 된 바이너리를 실행할 수 있습니다 cygwin.


1

Cygwin호환성 계층을 사용하지만 MinGW기본입니다. 이것이 주요 차이점 중 하나입니다.

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