[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
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는 다음과 같은 주요 특징들을 가지고 있습니다:
- 32비트와 64비트 Windows를 모두 지원합니다.
- GNU C 라이브러리와 도구 체인을 사용하여 C 및 C++ 코드를 컴파일, 링크 및 실행할 수 있습니다.
- 윈도우즈 API에 접근하기 위한 헤더 파일과 라이브러리를 제공합니다.
- POSIX 환경을 제공하여 크로스 플랫폼 개발을 지원합니다.
- 빌드 시스템을 사용하여 사용자가 필요한 구성 요소만 설치할 수 있습니다.
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
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