소스 컴파일 중에..에러 도무지 원인이 뭔지...
에러의 원인을 찾지 못하겠네요...
다른 게 필요 하다면, 올려 드릴께요.
입사해서 팀장님이 맡긴 첫일인데....ㅜ.ㅡ...
컴파일이 안돼서... 암 것도 못하고 있네요
도움이 필요합니다
-----< 에러 메시지 >-------------------------------------------------
../../inc/taf_shm.h:53: warning: no semicolon at end of struct or union
../../inc/taf_shm.h:53: parse error before numeric constant
../../inc/taf_shm.h:55: warning: type defaults to `int' in declaration of `T_SYS_INFO'
../../inc/taf_shm.h:55: warning: data definition has no type or storage class
-----< ../../inc/taf_shm.h >------------------------------------------
11 typedef struct _T_SYS_INFO {
12 unsigned short siTafNo;
13
14 struct {
15 char cActive;
16 char cAlarmLevel;
17 char cDebugLevel;
18 char cReserved1;
19 char szProcName[PROC_NAME_SIZE];
20 char szVersion[8];
21 unsigned int uiLastBeat;
22 unsigned int uiBeat;
23 } SW[MAX_SW_BLOCKS];
24
25 struct {
26 int dWM_Critical;
27 int dWM_Major;
28 int dWM_Minor;
29 } CPU;
30
31 struct {
32 int dWM_Critical;
33 int dWM_Major;
34 int dWM_Minor;
35 } MEM;
36
37 struct {
38 int dWM_Critical;
39 int dWM_Major;
40 int dWM_Minor;
41 } DISK;
42
43 struct {
44 char cActive;
45 char cAlarmLevel;
46 char cDebugLevel;
47 char cReserved1;
48 char szProcName[PROC_NAME_SIZE];
49 char szVersion[8];
50 unsigned int uiLastBeat;
51 unsigned int uiBeat;
52 } SW[MAX_SW_BLOCKS];
53
54 } T_SYS_INFO;
[quote]../../inc/taf_shm.h:53: parse err
혹시 T_SYS_INFO 를 어디서 정의 해서 쓰고 있지 않나요?
SW[MAX_SW_BLOCKS]가 두 번 들어가서 그런 거 아닌가요?
SW[MAX_SW_BLOCKS]가 두 번 들어가서 그런 거 아닌가요?
2단계 struct 구조라 소스 파악도 힘들군요.. 내부 구조체를 정
2단계 struct 구조라 소스 파악도 힘들군요..
내부 구조체를 정리하고 보니 우선
typedef struct _T_SYS_INFO {
unsigned short siTafNo;
struct _TYPE1 SW[MAX_SW_BLOCKS];
struct _TYPE2 CPU;
struct _TYPE3 MEM;
struct _TYPE4 DISK;
struct _TYPE5 SW[MAX_SW_BLOCKS];
} T_SYS_INFO;
_TYPE? 는 임의로 붙인 이름입니다.(원래 코드와 비교하면 _TYPE1과 _TYPE5는 같은 놈이지요.)
이렇게 정리해서 보니 doldori 님의견처럼 SW[MAX_SW_BLOCKS] 가 두번 정의되어 있네요..
여기서 1차적인 문제가 있을 듯 합니다.
그리고 제안을 드린다면 내부 구조체들을 모두 typedef를 이용해서 _T_SYSINFO외부로 빼 주세요.
그렇게 한 뒤에 다시한번 컴파일 해 보세요.. 그래야 정확하게 어디가 잘못인지를 알 수 있을 것 같습니다.
또한 외부로 빼 두는 것이 유지보수에 편리합니다.
먼저 관심 가져 주신 것 감사드리구요.앞선 답변들에 대해 답변을 달자
먼저 관심 가져 주신 것 감사드리구요.
앞선 답변들에 대해 답변을 달자면..SW[MAX_SW_BLOCKS]는 두번 들어간 것이 아니고, 제가 복사를 급하게 하느라, 잘못 한거구요. 위에 한번만 적혀 있습니다.
이 질문에 대해서는 '아니요'네요. 정의는 적힌 소스에서만 정의되어 있고, 다른 화일에서 extern으로 선언해서 포인터로만 사용하고 있습니다.
님들이 말씀해 주신대로 아래와 같이 꺼내서 돌렸는데, 그래도 에러가 나네요. 그래도 이렇게 보니 눈에 확 들어오기는 하는데...
unsigned short가 무슨 말썽을 일으키는 건지... 알수가 없네요 ㅜ.ㅜ
----< error message >-----------------
../../inc/taf_shm.h:42: warning: no semicolon at end of struct or union
../../inc/taf_shm.h:42: parse error before numeric constant
../../inc/taf_shm.h:78: parse error before '}' token
../../inc/taf_shm.h:78: warning: type defaults to `int' in declaration of `T_SYS_INFO'
../../inc/taf_shm.h:78: warning: data definition has no type or storage class
---<../../inc/taf_shm.h >----------------
11 typedef struct {
12 char cActive;
13 char cAlarmLevel;
14 char cDebugLevel;
15 char cReserved1;
16 char szProcName[PROC_NAME_SIZE];
17 char szVersion[8];
18 unsigned int uiLastBeat;
19 unsigned int uiBeat;
20 } _T_SW;
21
22 typedef struct {
23 int dWM_Critical;
24 int dWM_Major;
25 int dWM_Minor;
26 } _T_CPU;
27
28 typedef struct {
29 int dWM_Critical;
30 int dWM_Major;
31 int dWM_Minor;
32 } _T_MEM;
33
34 typedef struct {
35 int dWM_Critical;
36 int dWM_Major;
37 int dWM_Minor;
38 } _T_DISK;
39
40 typedef struct _T_SYS_INFO {
41 unsigned short siTafNo;
42 _T_SW SW[MAX_SW_BLOCKS];
43 _T_CPU CPU;
44 _T_MEM MEM;
45 _T_DISK DISK;
46
47 #if 0
48 struct {
49 char cActive;
50 char cAlarmLevel;
51 char cDebugLevel;
52 char cReserved1;
53 char szProcName[PROC_NAME_SIZE];
54 char szVersion[8];
55 unsigned int uiLastBeat;
56 unsigned int uiBeat;
57 } SW[MAX_SW_BLOCKS];
58
59 struct {
60 int dWM_Critical;
61 int dWM_Major;
62 int dWM_Minor;
63 } CPU;
64
65 struct {
66 int dWM_Critical;
67 int dWM_Major;
68 int dWM_Minor;
69 } MEM;
70
71 struct {
72 int dWM_Critical;
73 int dWM_Major;
74 int dWM_Minor;
75 } DISK;
76
77 #endif
78 } T_SYS_INFO;
일단 올리신 부분에서 문제는 없습니다. 바로 위에 올리신 코드를 따로 떼
일단 올리신 부분에서 문제는 없습니다. 바로 위에 올리신 코드를 따로 떼어다가 컴파일해 보시면 아무런 문제가 없다는걸 확인하실 수 있습니다. 저는 PROC_NAME_SIZE와 MAX_SW_BLOCKS가 어떻게 정의되어 있는가가 의심이 듭니다.
만약 위의 두 상수값들도 정상이라면, 그 이전의 코드(#include로 포함된 소스들을 포함해서!)에서 { }, (), [] 등등이 짝이 제대로 맞는지를 확인해보고 싶군요. 혹은 ;라던가 등등...
참고로 vim에서 커서를 소스 파일의 가장 마지막의 괄호 위에 올려놓고 % 키를 치면 대단히 편하게 짝이 맞는지 아닌지를 확인할 수 있습니다.
관심 가져 주셔서 감사합니다.제가 헤더화일을 건드렸는데...거기에
관심 가져 주셔서 감사합니다.
제가 헤더화일을 건드렸는데...
거기에 새로 추가한 변수명이...
같더군요..SW...ㅡ.ㅡ;;;;
정말 별것도 아닌 거였는데 죄송하구요.
다시한번 관심 가져 주신 분들께 감사드립니다.
다들 평안하세요.^^
ps..그런데..사용중인 사용자 이름이라고 글이 안 올려 지네요..쿨럭..
댓글 달기