필요한 것 :컴파일러
1. 윈도우 환경에서 c언어 컴파일러 설치
공식사이트말고 여기서 다운받아야 합니다.
https://sourceforge.net/projects/mingw-w64/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는 다음과 같은 주요 특징들을 가지고 있습니다:
- 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
https://blog.uniony.me/vscode/gcc/
'오늘의 공부 > 개발도구' 카테고리의 다른 글
[Visual Studio Code]Cwd Pwd 차이 (0) | 2023.08.12 |
---|---|
[c언어] windows에서 gcc(c 컴파일러) 설치하기 2(visual studio 설정) (0) | 2023.08.10 |
[vscode] intellisense란? (0) | 2021.10.26 |
우분투20.04: conda env list 오류: 가상환경 리스트 출력 오류[importlib_metadata has no attribute version] (0) | 2021.03.29 |
우분투에서 gif 파일 만들기(peek 설치하기) (0) | 2020.07.09 |