링킹에러.. 이런 컴파일 에러는 처음보는데요..이해가 안되요..
글쓴이: shean0 / 작성시간: 목, 2004/01/15 - 5:34오후
안녕하세요..문제가 생겨 조언을 구합니다.
링킹에러같은데... 이거 혹시
c화일하고 pc화일하고 [include한]구조체에서 패딩이일어났을때 일어날수 있는 현상인가요???
make clean;make all; Cleaning... ==> Cleaning in dblib Cleaning in /export/home/sean/ProJect/WipiMagic10/dblib... ==> Cleaning in bmpTosis Cleaning in /export/home/sean/ProJect/WipiMagic10/bmpTosis... ==> Cleaning in src Cleaning in /export/home/sean/ProJect/WipiMagic10/src Building all ===> Entering dblib for build Pro*C/C++: Release 8.1.7.0.0 - Production on Thu Jan 15 17:35:53 2004 (c) Copyright 2000 Oracle Corporation. All rights reserved. System default option values taken from: /oracle/app/product/8.1.7/precomp/admin/pcscfg.cfg gcc: -lclntsh: linker input file unused since linking not done gcc: -lpsa8: linker input file unused since linking not done gcc: -lcore8: linker input file unused since linking not done ===> Entering bmpTosis for build #@gcc -O3 -D_HAVEFORK -I. -I/export/home/sean/ProJect/Magic10/include -I/oracle/app/product/8.1.7/precomp/public -c bmpTosis.c ./sislib/bmp2sis_pal.a #@gcc -O3 -D_HAVEFORK -I. -I/export/home/sean/ProJect/Magic10/include -I/oracle/app/product/8.1.7/precomp/public -c myhuffman.c ./sislib/bmp2sis_pal.a #@gcc -O3 -D_HAVEFORK -I. -I/export/home/sean/ProJect/Magic10/include -I/oracle/app/product/8.1.7/precomp/public -c MakeBmpFromRaw.c ./sislib/bmp2sis_pal.a ===> Entering src for build ld: 경고: 기호 `billcom'의 크기은(는) 다름: (파일 Magic10Main.o 값=0x6c; 파일 /export/home/sean/ProJect/Magic10/dblib/dblib.o 값=0x60); Magic10Main.o 정의됨 ld: 경고: 기호 `macs'의 크기은(는) 다름: (파일 Magic10Main.o 값=0x38; 파일 /export/home/sean/ProJect/Magic10/dblib/dblib.o 값=0x30); Magic10Main.o 정의됨
여기 부분이요..
ld: 경고: 기호 `billcom'의 크기은(는) 다름: (파일 Magic10Main.o 값=0x6c; 파일 /export/home/sean/ProJect/Magic10/dblib/dblib.o 값=0x60); Magic10Main.o 정의됨 ld: 경고: 기호 `macs'의 크기은(는) 다름: (파일 Magic10Main.o 값=0x38; 파일 /export/home/sean/ProJect/Magic10/dblib/dblib.o 값=0x30); Magic10Main.o 정의됨
정상적으로 서비스하던 것에서.. 상대편 서버에서 헤더가 바뀌었습니다.
그래서 두개의 파일(A.h Magic10Main.c ) 을 수정했습니다.
[dblib.pc라는 화일은 A.h의 billcom macs를 사용하는 부분이없습니다,
즉 영향을 A.h를 include하고 있지만. 바뀐부분은 영향을 주는 부분이 아닙니다]
A.h라는 파일에서 ..아래와 같은 구조체의 내용부분을 수정한 것 뿐인데..
왜 이런에러가 나오는지..
이런 에러는 어떤경우를 찿아야하는지 조언부탁드립니다..
참조.. 헤더 형식입니다.
typedef struct { int iPacketLength; ... char achReserved[11]; } BILL_COM_PACKET; #define BILL_COM_PACKET_SIZE 108 typedef struct { int iSignature1; .. char achSignature2[4]; } MacsHeaderPkt; #define MacsHeaderPkt_SIZE 56[/code]
Forums:
Makefile 에서 dependency 가 맞게 설정되지 않아서 이런
Makefile 에서 dependency 가 맞게 설정되지 않아서 이런 결과가 나오는것 아닐까요?
헤더 파일을 바꾸면 헤더 파일을 include 한 모드 파일이 다 재컴파일되어야 하는데, 링크 경고의 구조체 크기를 보니 라이브러리 파일은 재컴파일 되지 않은듯 하군요.
추신:
#define 으로 구조체의 크기를 정의해놓고 코드에서 거기에 의존하면 구조체의 정의가 바뀌었을때, 또 구조체의 크기를 수동으로 계산하고 고쳐줘야 되겠죠. sizeof() 를 쓰는것이 유지보수하기에 좋을듯 합니다.
댓글 달기