profile image

L o a d i n g . . .

반응형

삽질

vscode가 쓰다 보니까 가벼워서 좋은데, 이것저것 커스텀 할 수가 있어서 좋으면서도 어렵다.

사실 컴파일러 차이도 잘 모르겠고, 빌드하는 것도 잘 몰라서... 그냥 확장 기능 이용해서 우클릭 빌드 중이었다. 근데 때마침 C++ 버전 충돌이 나서 멘붕이 왔다.

구글링을 했을 때 나와 비슷한 경우가 있긴 했으나, 따라 해 봐도 제대로 해결되지 않았다...

 

나 같은 경우에는 심즈였나...? 어떤 게임 관련 툴 때문에 mingw-x86 구 버전이 깔려 있는 상황이었다. 요즘 모던 C++ 공부에 관심이 많은데, gcc가 너무 예전 버전이라 그런가 자꾸만 #include에서 오류가 발생했다. 😣

그래서 우선 구 버전을 유지하고, 새 버전을 추가로 설치해 봤더니 역시나 되지 않는다.

cmd에서 버전 체크할 때는 8.0으로 시작하길래, 당연히 최신 버전으로 실행될 줄 알았는데 아니었나 보다. 충돌이 일어난 듯했다.

 

회사 PC에서 테스트를 해 본 결과, 최신 버전만 설치되어 있는 경우에는 컴파일이 정상적으로 진행되었다.

구글링 하면서 윈도우용 설치 파일을 이용하라고 나와서 그걸로 하다가 계속 실패해서 시간을 꽤 많이 잡아먹었다. 어떻게 해야 하나 고민하다가 마침 다운로드 폴더에 버전이 남아 있길래 파일을 그대로 긁어왔다.

https://drive.google.com/file/d/1UKCpu9P-wAIIljyaNUQVgGvVNdq9kV0j/view?usp=sharing 

 

x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z

 

drive.google.com

 

 

해결 방법

  1. 우선 구 버전 mingw32 폴더를 삭제하고, 시스템 path에서도 지운다.
  2. 가져온 압축 파일을 C 드라이브에 풀고, 해당 경로를 시스템 path에 추가한다.
  3. 빌드 명령어를 변경한다. (g++ -std=c++17)

나는 Code Runner를 사용하기 때문에, Code Runner의 settings.json을 수정했다.

 

#include <iostream>
#include <optional>

int main()
{
    std::cout << "TEST" << std::endl;
    std::optional<std::string> a("HI");
    std::cout << a.value() << std::endl;
    return 0;
}

C++17부터 추가된 optional을 사용하여 컴파일된 것을 확인했다.

 

한글 출력을 위해서 chcp 65001을 추가해 주면 정말 끝!

"cpp": "chcp 65001 && cd $dir && g++ -std=c++17 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",

 

정상적으로 튜플을 이용할 수 있게 되어 눈물이 날 뻔했다... 😭

반응형
복사했습니다!