본문 바로가기
troubleshoot of dev

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

by 도비야 산책가자 2020. 5. 31.

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를 사용하여 이벤트를 받아 처리하는 것은 다른 게시글을 통해 포스팅 할 것이다.