troubleshoot of dev

windows환경에서 visual studio에 pthread library 포함하기

도비야 산책가자 2020. 5. 31. 20:38

pthread는 유닉스계 lib이다.

나의 경우에는 linux 환경에서 동작하는 application을 개발하기 위해 but, 주로 사용하는 컴퓨터의 경우 windows 이기 때문에 해당 library를 windows에서 사용 할 수 있도록 할 필요가 있었다.

 

pthread는 찾아보니 대부분 아래 링크에서 library를 다운받아 사용하고 있다.

https://www.sourceware.org/pthreads-win32/

 

POSIX Threads (pthreads) for Win32

Open SourcePOSIX Threads for Win32 Current release: 2.9.1 (2012-05-27)See the ANNOUNCEMENT and NEWS for details.Pthreads-w32 release 1.11.0 (2005-06-04) was the last series 1.x.x version! (Version 1.11.0 is a back-port of the 2.7.0 functionality and bug fi

www.sourceware.org

아래는 위 링크의 ftp server로 최신 release버전을 다운받아 사용하면 된다.

ftp://sourceware.org/pub/pthreads-win32

최신 release버전에서 다운받고 싶은 버전을 다운로드 한 후 가장 필요한 디렉토리는 /include와 /lib 디렉도리이다.
두 디렉토리를 다운 받으면 된다. ftp 서버 접속 가능하도록 filezilla를 다운받아 접근하여 받아와도 되고 링크를 쭉 따라가서 필요한 lib 파일을 클릭하면 다운 받을 수 있다. 

 

이제 다운 받은 것을 환경 설정 해보자.

 

1. 다운 받은 include와 lib를 알맞은 장소에 저장한다.

본인 컴퓨터가 64bit 라면 C:\Windows\SysWOW64

본인 컴퓨터가 32bit 라면 C:\Windows\System32

에 저장한다. 디렉토리 구조는 대충 본인이 편하게 구성하면 된다.

 

난 귀찮기 때문에 pthread.h라는 디렉토리를 만들고 아래에 include와 lib를 넣었다.

-C:\Windows\SysWOW64\pthread.h\include

-C:\Windows\SysWOW64\pthread.h\lib

 

2. 다음은 visual studio에서 찾을 수 있도록 구성해줘야한다.

프로젝트를 생성하고, 생성한 프로젝트에 우클릭하여 속성으로 들어간다.

상단바에 있는 프로젝트(P)-속성(P)에 들어가도 동일하게 project 속성 페이지를 볼 수 있다.

 

2-1. 그중 VC++디렉토리에 포함디렉토리와 라이브러리 디렉토리를 세팅하면 된다. 

아래 예쁘게 볼딩되어 있는 두개를 클릭해서 편집을 누른뒤에 본인이 집어넣은 include 및 lib 디렉토리를 넣으면 된다.

2-2 C/C++ 추가 포함 디렉토리를 세팅한다.

얘도 동일하게 클릭하여 편집을 누르면 아래와 같이 창이 뜨는데 본인이 세팅한 경로 넣어주면 된다.

2-3 링커쪽도 세팅한다.

링커는 세팅할게 일반이랑 입력 두 부분이다.

일반에서 다음과 같이 추가 라이브러리 디렉토리를 설정한다.

이후 입력의 추가 종속성에 lib 포함시킨다. 

3. 잘 적용되었는지 확인한다.

혹시 실행할 때 두가지 문제가 발생할 수 있다.

 

3-1 혹시 실행할 때, C2011 코드로 열받게 한다면

#define HAVE_STRUCT_TIMESPEC

위 매크로로 혼내주면 된다.

 

 

3-2 만약 pthread를 찾을 수 없다고 열받게 하면 소스 디렉토리에 lib 하위 것들을 잡아 넣어준다.

경로는 2019 기준으로 default경로가 본인계정-source-repos로 잡힐 수 있다.

내가 세팅 안했던 걸로 기억하는데. 내경로랑 아마 같을듯 싶다.

lib에 있는 하위 것들을 모두 생성한 project에 다 집어 넣는다.

이러면 왠만하면 실행 될 것이다.

여기서는 이제 정상적으로 실행되는 것을 확인하면 된다.

pthread를 사용하여 이벤트를 받아 처리하는 것은 다른 게시글을 통해 포스팅 할 것이다.