저는 C++ 개발자는 아니지만 항상 컴파일러에 관심이 있었고 일부 GCC 항목 (특히 LLVM)에 관심을 가졌습니다.GCC-Windows가 cygwin에 의존하는 이유는 무엇입니까?
Windows에서 GCC는 제대로 실행하려면 POSIX 에뮬레이션 계층 (cygwin 또는 MinGW)이 필요합니다.
왜 그럴까요?
저는 C++로 작성되고 다른 플랫폼 (Subversion, Firefox, Apache, MySQL) 용으로 크로스 컴파일 된 많은 소프트웨어를 사용하며 cygwin 또는 MinGW가 필요하지 않습니다.
C++ 베스트 프랙티스 프로그래밍에 대한 제 생각은 합리적으로 플랫폼 중립적 인 코드를 작성하고 컴파일 프로세스 중 모든 차이점을 처리 할 수 있다는 것입니다.
그래서 GCC는 무엇입니까? Windows에서 기본적으로 실행할 수없는 이유는 무엇입니까?
편집 :
좋아, 두 개의 응답 지금까지 기본적으로 "는 POSIX의 헤더를 사용하기 때문에 GCC는 POSIX 층을 사용한다"라고.
하지만 그 질문에는 실제로 대답하지 않습니다.
이미 내가 좋아하는 표준 라이브러리에 대한 헤더 집합이 있다고 가정 해 보겠습니다. 왜 여전히 posix 헤더가 필요한가요?
GCC는 실제로 cygwin/mingw를 필요로합니까 RUN?
아니면 헤더와 라이브러리 에뮬레이션 레이어 만 있으면됩니까? 그렇다면 왜 필자는 필요한 리소스가있는 "lib"디렉토리를 제공하지 못합니까? 다시
편집 :
좋아, 나는 또한 the D Programming Language에서 코드를 작성 ... 질문을 명확히하기 위해 다시
을 시도 할 것이다. 공식적인 컴파일러의 이름은 "dmd"이고 Windows와 Linux 모두를위한 공식적인 컴파일러 바이너리가 있습니다.
Windows 버전에는 POSIX 에뮬레이션이 필요하지 않습니다. 그리고 리눅스 버전은 Win32 에뮬레이션을 필요로하지 않습니다. 컴파일러가 환경에 대한 가정을 가지고 있다면, 가정을 꽤 잘 숨긴다.
물론 표준 라이브러리를 찾을 위치와 정적으로 또는 동적으로 링크 할 라이브러리를 어디에서 찾을 지 컴파일러에게 알려야합니다. 대조적으로, GCC는 posix 환경에서 작동하는 것으로 주장하며 ME에게 에뮬레이션 레이어를 설정하여 이러한 가정을 유머러스하게 묻습니다.
하지만 정확히 GCC에서 그 레이어를 사용하고 있습니까? 그냥 stdlib 헤더를 찾고 있는가? "/ usr/lib"내의 헤더를 찾는다 고 가정한다.
그렇다면 헤더 파일을 찾기 위해 "C :/gcc/lib"를 살펴 보라고 말하면 안됩니까?
또는 GCC 자체가 POSIX 라이브러리를 사용하여 파일 시스템에 액세스하고 다른 저수준 항목을 수행합니까? 그렇다면 왜 그들이 그들이 좋아하는 윈도우 POSIX 라이브러리와 정적으로 링크하지 않는지 궁금하다. 사용자가 종속성을 설정할 때 응용 프로그램에 종속성을 설정할 수 있어야하는 이유는 무엇입니까?
지금부터 몇 가지 * 올바른 * 대답을 선택하십시오. MinGW에는 cygwin1.dll이 필요하지 않습니다. 핵심 gcc 팀이 Microsoft Windows를 지원하지 않는다는 사실을 알고 싶다면이를 묻는 것이 좋습니다. –
리눅스에서 Visual Studio 및 VC++를 실행하려면 왜 WINE 또는 다른 것이 필요합니까? –