솔라리스에서 C 컴파일할때..이런 에러 첨보네요
SunOS line01 5.8 Generic_108528-18 sun4u sparc SUNW,UltraAX-i2
아래와 같은 에러가 발생합니다.
컴파일할때..
-D_POSIX_C_SOURCE를 넣지 않으면 잘되고 동작도 잘 되는데
이거 함 넣어 보았다가 아래와 같은 에러가 발생합니다.
어째서 발생하는 것인지 모르겠습니다.
$ make
gcc -g -D_POSIX_C_SOURCE -D_REENTRANT -Wall -lpthread -c -o err.o err.c
In file included from /usr/include/sys/vnode.h:42,
from /usr/include/sys/stream.h:22,
from /usr/include/netinet/in.h:41,
from /usr/include/sys/socket.h:200,
from libcomm.h:14,
from err.c:1:
/usr/include/sys/resource.h:144: field `ru_utime' has incomplete type
/usr/include/sys/resource.h:145: field `ru_stime' has incomplete type
/usr/include/sys/resource.h:160: confused by earlier errors, bailing out
답변이라 하기엔 좀 뭐하지만....POSIX_C_SOURCE 키워
답변이라 하기엔 좀 뭐하지만....
POSIX_C_SOURCE 키워드를 이용해
위 코드들을 검사해보면 답이 나오지 않을까요?
#ifdef POSIX_C_SOURCE
...
#else
...
#endif
이런 코드들 때문에 나오는 에러같습니다.
Unix에는 몇가지 표준과 벤더에서 나름대로 취급하는 표준은 아니지만 널
Unix에는 몇가지 표준과 벤더에서 나름대로 취급하는 표준은 아니지만 널리 사용하는 것을 선언한 것들이 있습니다.
POSIX, X/OPEN, HPUX, AIX 등등인데..
-Wall, -W 을 켜고 컴파일하다보면, 적당한 선언없이 사용하는 모든 함수 호출에 대하여 warning을 내곤하죠. 게다가, define 문이나, typedef가 없기도 합니다.
이들 표준들은 사용하려고 하면 몇가지 선언을 해주어야합니다.
근래의 함수들을 전반적으로 사용하려면,
#define _XOPEN_SOURCE 1
#define _XOPEN_SOURCE_EXTENDED 500
#define _HPUX_SOURCE 1
#define _ALL_SOURCE 1
#define _BSD_SOURCE 1
등을 선언해주어야합니다.
porting 할때는 상당히 골치아픈 문제입니다. header를 열어보면서 어떤것을 선언해야하는지 살펴보면서 define문을 모아놓고 사용하기에 앞서 include하시면서 쓰면 됩니다.
---
http://coolengineer.com
댓글 달기