본문 바로가기

어떻게 할까/소프트웨어

MinGW 에서 pthread 와 빌드시 time 구조체 오류 날때.

 MinGW 에서 빌드를 할때 특정 라이브러리를 M-Sys 를 통해 빌드 하다 보면 다음 오류를 볼 경우가 많습니다.


error: redefinition of 'struct timespec'


 이런 경우는 대부분 pthread 내에 다음과 같이 정의 되어 있는걸 확인 해 볼 수 있습니다.


#if !defined(HAVE_STRUCT_TIMESPEC)
#define HAVE_STRUCT_TIMESPEC
#if !defined(_TIMESPEC_DEFINED)
#define _TIMESPEC_DEFINED
struct timespec {
        time_t tv_sec;
        long tv_nsec;
};
#endif ⁄* _TIMESPEC_DEFINED *⁄
#endif ⁄* HAVE_STRUCT_TIMESPEC *⁄

 해결책은 HAVE_STRUCT_TIMESPEC 을 빌드시 define optin -D 나, config 관련된 (보통 config.h) 파일에 추가하면 됩니다.

예로 FFMPEG library 를 WIN32 thread 대신 PTHREAD 로 쓰고 싶다면 다은과 같이 config.h 에 PTHREAD 부분을 수정 하거나 ...

#define HAVE_PTHREADS 1
#define HAVE_STRUCT_TIMESPEC 1
#define HAVE_W32THREADS 0


빌드시 Makefile 등을 수정해서 -DHAVE_STRUCT_TIMESPEC 을 지정해 주면 됩니다.

단, 이런경우 코드 내부에서 #include <time.h> 또는 #include <linux/time.h> 를 이미 지정해서 쓰고 있어야 한다는 건 먼저 고려 되어야 합니다.