Mingw thread 에러

강한친구·2022년 3월 14일

C / CPP

목록 보기
19/19

c++11에 추가된 thread 클래스

2011년에 출시된 cpp 11에 thread 클래스와 헤더가 추가되면서 쓰레드를 쓸 수 있게 되었다.

근데 2022년에 코딩하는 나는 안되고있었다...

std::thread error (thread not member of std)

라는 이름의 에러였는데, 문제는 이 에러 솔루션들은 대부분 2011년 이전이나 막 thread가 막 업데이트 된 당시에 mingw가 제대로 thread를 지원하지 않으면서 생긴 문제들이였지, 2022년 cpp17을 쓰는 시점에서 생길 문제는 아니라 생각했다.

그리고 thread 에서 declaration을 보는것도 가능했다.

mingw 컴파일러 문제?

mingw g++ 컴파일러를 사용해서 컴파일링하고 있었는데 이와 관련해서 구글링을 해본 결과,

g++ -std=c++0x -Wall -Wextra -O0 -ggdb -lpthread -mthreads -pthread -Wno-unknown-pragmas test${BUILD}.cpp

같이 lpthread, pthread를 써서 해보라는 해결책이 많았다. 물론 전부 안되었다. 온라인 cpp 코딩사이트에서 시도해본 결과 정상작동하는것을 확인하였고, mingw 컴파일러에 무슨 문제가 있는것이라 추론하였다.

그래서 해결책은

1시간에 달하는 나홀로 마라톤 회의 끝에 이런 을 찾아냈다. 나랑 같은 버전의 mingw (6.3.0)에서 같은 증상을 겪는 사람의 문제였다.

이 댓글이 해결책이 되었다.

Some MinGW distributions just don't support threading. You might have one of them. Here's a link to installation instructions for a much more up-to-date compiler that does (and has a package manager with an impressive ecosystem of support libraries and tools).

MinGW 몇몇 배포판들은 쓰레드가 지원되지 않는다고한다. 그래서 msys2를 이용해서 mingw64를 사용하면 정상작동한다는 친절한 링크까지 달아주었다.

결국 환경변수에서 mingw를 지워버리고 msys를 다시 설치한다음 기존에 설정했던 컴파일 경로, task.json, cpp property를 전부 바꿔주었다.

이 글 참고

그랬더니 아무 오류 없이 해결되었고, 다른 cpp파일도 컴파일 되는것을 확인했다!

성공~

만약 같은 증상을 겪는 분이 있으시다면, 이 글을 찾을지는 모르겠지만 mingw말고 msys2를 써서 해결해보면 좋을것같다.

0개의 댓글