먼저 MinGW에서 pthread를 사용하기 위해 Open Source POSIX Threads for Win32를 사용한다.
사이트 : https://sourceware.org/pthreads-win32/
1.
ftp://sourceware.org/pub/pthreads-win32 -> pthreads-w32-2-9-1-release.zip을 다운받는다(나의 경우)
2.
압축을 푼 뒤 Pre-built.2\include안의 파일들을 MinGW\include 안에 복사한다.
* gcc로 컴파일 시 pthread.h 파일을 찾을 수 있어야 하기 때문에 필요하다.
3.
Pre-built.2\lib\x86 안의 libpthreadGC2.a 파일과 libpthreadGCE2.a 파일을 MinGW\lib 안에 복사한다.
* 설치환경에 따라 x64 혹은 x86을 선택. 나의 경우 x86
* 라이브러리를 링킹하는 과정에서 위의 두 파일이 필요하다.
4.
Pre-built.2\dll\x86 안의 pthreadGC2.dll 파일과 pthreadGCE2.dll 파일을 MinGW\bin 안에 복사한다.
* 설치환경에 따라 x64 혹은 x86을 선택. 나의 경우 x86
* 2,3번과 달리 4번은 굳이 bin폴더가 아니어도 path가 잡혀있는 경로라면 ok.
5.
pthread 라이브러리를 사용하는 c소스코드를 빌드 할 때 -lpthread 옵션 대신 -lpthreadGC2로 옵션을 주어야 한다.
사실 당연한 건데, pthreads-win32에서 제공하는 라이브러리 파일의 이름이 libpthreadGC2.a 라서 그렇다.
-lpthreadGC2 옵션을 해석하면, libpthreadGC2.a 라는 라이브러리 파일을 지정된 디렉토리에서 찾으라는 말이다.
* -lpthreadGC2에서 l은 소문자 엘이다.
* gcc에서 -l(소문자 엘)옵션과 -I(대문자 아이)옵션과 -L(대문자 엘)옵션은 모두 다른 의미를 가진다.
* 관련 참고 글 : http://huammmm1.tistory.com/458
6.
한 가지 더. -lpthread던 -lpthreadGC2던 이 옵션은 가장 마지막에 기술해야 한다. gcc 사용 시 라이브러리에 대한
옵션은 지정하는 순서가 중요한 의미를 가지기 때문에 맨 마지막에 두는 것과 그렇지 않은 것에는 차이가 있다.
관련 정보 : http://stackoverflow.com/questions/10213635/linker-errors-in-compiling-a-simple-pthread-code-under-mingw
'C > 공개글' 카테고리의 다른 글
c는 call-by-value? call-by-reference? (0) | 2014.11.12 |
---|---|
비주얼스튜디오에서 삼중 문자 기능 사용하기 (0) | 2014.10.15 |
fgetc 함수의 리턴 값은 왜 int형인가 (fgetc(), getc() and getchar()) (0) | 2013.07.16 |
signed와 unsigned로 명시하는 것의 차이? (0) | 2013.07.16 |
configure, make, make install (0) | 2013.05.13 |