본문 바로가기

오늘의 공부/개발도구

[c언어] windows에서 gcc(c 컴파일러) 설치하기 1


필요한 것 :컴파일러

1. 윈도우 환경에서 c언어 컴파일러 설치

 

 공식사이트말고 여기서 다운받아야 합니다.

https://sourceforge.net/projects/mingw-w64/files/

 

MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net

Automate Your Processes With AI And Without Coding Qore serves customers of all sizes - including mid-market and large enterprises, software developers and system integrators

sourceforge.net

Files탭 클릭해서

 

 

MinGW-W64 GCC-8.1.0의  x86_64-posix-seh 를 다운받을 것입니다.

GCC-8.1은 버젼을 gcc의 버전을 의미합니다.

x86_64은 윈도우 아키텍처를 의미합니다.

posix는 쓰레드를 무엇으로 할것인지에 대한 것입니다.

seh는 예외처리는 무슨 종류로 할것인지에 대한 것입니다.

 

옵션에 관한것은 아래에 gpt를 통해 물어보았으니 참고하시면 될 것 같습니다.

 

다운받았으면 mingw64를 원하는 위치에 압축해제 해줍니다.

(저는 programfiles에 압축해제했습니다.)

 

그리고 설치된 폴더로 가 위치를 복사해줍니다.(환경변수에 추가하기 위함)

 

그리고 제어판에 들어가 시스템 환경변수 탭을 들어갑니다.

 

 

들어가면 사용자변수와 시스템 변수 2개의 설정탭이 보이는데 사용자변수의 변수명 Path 를 클릭하고 편집탭에

들어갑니다.

 

 

그리고 새로 만들기를 해서 아까 압축해둔 파일의 bin경로를 붙여 넣어줍니다.(이때 bin폴더까지 꼭 포함시켜줘야 합니다)

 

확인을 하고 cmd로 설치가 되었는지 확인해봅니다.

gcc --version

 

 


[궁금증들]

왜 bin 폴더를 추가해야할까?

 

[gpt의 답변]
'bin' 폴더는 'binary'의 약어로, 실행 가능한 바이너리 파일들이 들어있는 디렉토리입니다. 바이너리 파일은 컴퓨터가 

직접 실행할 수 있는 실행 파일들을 말합니다. 이러한 실행 파일들은 특정 작업을 수행하거나 프로그램을 실행하는 데 사용됩니다.

보통 'bin' 폴더는 특정 프로그램이나 도구의 실행 파일들이 위치하는 폴더를 지칭합니다. 예를 들어, 개발 도구인 Mingw-w64을 설치하면 그 폴더에는 Mingw-w64의 컴파일러, 링커, 디버거 등의 실행 파일들이 들어있는 'bin' 폴더가 있을 수 있습니다

 

 

[질문]

윈도우 환경에서 c언어 컴파일러 설치하려는데 mingw64 를 추천하더라고 이게 뭐야?

 

[답변]

요약하자면 컴파일러와 링크를 편하게 해주는 도구입니다.

 

아래는 원본 답변

Mingw-w64는 Windows 환경에서 C 언어와 C++ 언어를 위한 오픈 소스 컴파일러 도구 체인입니다. "Minimalist GNU for Windows"의 약자로, GNU 프로젝트의 컴파일러 및 도구를 Windows 운영 체제에서 사용할 수 있도록 제공하는 프로젝트입니다.

 

Mingw-w64는 다음과 같은 주요 특징들을 가지고 있습니다:

  1. 32비트와 64비트 Windows를 모두 지원합니다.
  2. GNU C 라이브러리와 도구 체인을 사용하여 C 및 C++ 코드를 컴파일, 링크 및 실행할 수 있습니다.
  3. 윈도우즈 API에 접근하기 위한 헤더 파일과 라이브러리를 제공합니다.
  4. POSIX 환경을 제공하여 크로스 플랫폼 개발을 지원합니다.
  5. 빌드 시스템을 사용하여 사용자가 필요한 구성 요소만 설치할 수 있습니다.

Mingw-w64는 기본적으로 컴파일러와 링커를 포함하고 있어서 Windows에서 C/C++ 코드를 컴파일하는 데 유용합니다. 또한, 개발자들이 리눅스나 맥과 같은 다른 플랫폼에서 사용하는 GNU 도구들과 비슷한 환경을 윈도우에서 구축할 수 있게 해줍니다.

 

 

 

아키텍처는 윈도우니깐 x86의 64비트로 선택해주었습니다.

그런데 쓰레드랑 예외는 옵션이 이해가 가지 않아 gpt에게 물어보았습니다.

 

[gpt 답변]

 

일반적으로 대부분의 경우, 쓰레드 옵션은 POSIX를 선택하고, 예외 처리 옵션은 SEH를 선택하는 것이 좋습니다. POSIX 쓰레드와 SEH 예외 처리 방식은 유닉스/리눅스 환경과의 호환성 및 성능 측면에서 더 유리하기 때문입니다

 

 

Mingw-w64 설치 시 주어지는 옵션 중 쓰레드(thread)와 exception(예외 처리)에 대해 설명드리겠습니다.


쓰레드(thread) 옵션:
Win32: 

이 옵션은 Windows 운영 체제의 기본적인 쓰레드 모델인 Win32 API를 사용합니다. 쓰레드를 생성하고 관리하는 데에         Win32 API를 활용합니다. 이 옵션을 선택하면 Windows에서 멀티 쓰레드를 활용한 프로그래밍을 할 수 있습니다.

 

POSIX: 

POSIX 쓰레드 (Pthreads)는 다중 플랫폼에서 사용 가능한 쓰레드 모델로, Unix 기반 시스템에서 주로 사용됩니다. Mingw-w64의 POSIX 쓰레드 옵션을 선택하면 Windows에서도 POSIX 쓰레드를 활용하여 크로스 플랫폼 멀티 쓰레드 프로그래밍을 지원합니다. 이 옵션은 Unix와 유사한 쓰레드 API를 사용하며, 이식성이 높은 코드를 작성하는 데에 도움이 됩니다.

 

*Win32가 더 윈도우에 최적화된 프로그래밍을 할때 선택하는것이고,posix를 선택해도 멀티쓰레드를 활용한 프로그래밍이 가능하다.

 

 

 

[예외 처리(Exception) 옵션]
SEH (Structured Exception Handling): 

SEH는 Windows 운영 체제에서 예외를 처리하는 메커니즘 중 하나입니다. C++ 언어의 try-catch 블록과는 다른 예외 처리 메커니즘으로, Windows에서 발생하는 하드웨어 및 소프트웨어 예외를 처리하는 데 사용됩니다. Mingw-w64에서는 Windows 예외를 처리하기 위해 SEH를 사용할 수 있습니다.

 

 

SJLJ (Setjmp/Longjmp):

SJLJ는 다중 플랫폼에서 사용 가능한 예외 처리 메커니즘으로, setjmp와 longjmp 함수를 이용하여 예외를 처리합니다.

이 방법은 비교적 간단하지만 성능 면에서 다른 방식보다 느릴 수 있습니다. Mingw-w64에서는

이식성을 높이기 위해 SJLJ 예외 처리 메커니즘도 지원합니다.

 

 

 

여기에서 이식성이 높다라는 말이 헷갈려 한번 더 질문했습니다.


질문:

이식성이 높다는게 다른 운영체제에서도 mingw로 컴파일한 실행파일이 실행되는지를 말하는거야?

 

답변:

 

맞습니다! "이식성이 높다"는 말은 다른 운영 체제에서도 같은 소스 코드를 컴파일하여 실행 파일을 만들었을 때, 

해당 실행 파일이 다른 운영 체제에서도 정상적으로 동작하는 능력을 의미합니다.

 

Mingw-w64는 크로스 플랫폼 개발을 지원하기 위해 설계되었습니다. 따라서, Mingw-w64로 컴파일한 실행 파일은 원칙적으로 Windows 외의 다른 운영 체제에서도 동작할 수 있습니다. 이는 다른 운영 체제에서도 호환성과 이식성이 높은 소프트웨어 개발을 가능하게 합니다.

 

그런데 이후 답변에선 라이브러리나 하드웨어 구조차이가 큰경우는 안될수도 있다고 합니다.


 

 

[참고사이트]

https://brunch.co.kr/@mystoryg/56

 

MinGW 설치하기

with gcc and git bash | 빌드 과정에 대해서 공부하기 위해 MinGW와 gcc를 설치하였다. MinGW는 Windows에서 gcc를 사용할 수 있게 해주는 역할을 한다. 간단한 리눅스 명령어도 사용하기 위해서 git bash까지

brunch.co.kr

https://lukeha.tistory.com/50

 

Windows에서 gcc 설치하기

Windows에서 gcc를 사용하려면 MinGW(Minimalist GNU for Winodws)를 설치해야만 한다.다만, MinGW는 32비트만 지원하는 바람에 메모리 제약을 받을 수밖에 없어서, MinGW w64라고 하는 32/64비트용 MinGW를 설치하고

lukeha.tistory.com

https://blog.uniony.me/vscode/gcc/

 

Visual Studio Code에서 GCC 사용하기

리눅스 환경에서는 터미널에서 GCC를 쉽게 설치하고 사용할 수 있습니다. 그러나 윈도우에서는 다소 번거로운 작업이 필요합니다. 윈도우 cmd(명령 프롬프트)에서 GCC를 사용할 수 있도록 세팅을

blog.uniony.me