링킹에러.. 이런 컴파일 에러는 처음보는데요..이해가 안되요..

shean0의 이미지

안녕하세요..문제가 생겨 조언을 구합니다.

링킹에러같은데... 이거 혹시
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]
hb_kim의 이미지

Makefile 에서 dependency 가 맞게 설정되지 않아서 이런 결과가 나오는것 아닐까요?

헤더 파일을 바꾸면 헤더 파일을 include 한 모드 파일이 다 재컴파일되어야 하는데, 링크 경고의 구조체 크기를 보니 라이브러리 파일은 재컴파일 되지 않은듯 하군요.

추신:
#define 으로 구조체의 크기를 정의해놓고 코드에서 거기에 의존하면 구조체의 정의가 바뀌었을때, 또 구조체의 크기를 수동으로 계산하고 고쳐줘야 되겠죠. sizeof() 를 쓰는것이 유지보수하기에 좋을듯 합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.