컴파일 오류시 문제점 찾는 방법이 무엇인지요?
글쓴이: dgkim1026 / 작성시간: 목, 2013/11/14 - 2:30오후
CentOS 환경에서 make 수행 중 다음과 같은 오류가 나왔습니다.
문제원인을 찾아가는 방법이 무엇인지요?
[oracle@infodea src]$ make -f dims0002_mk
cc -m64 -DDEBUG=0 -o dims0002 -L/app/oracle/11g/lib/ dims0002.o mimsprocjj.o mimsUtil.o mimsFunction.o mimsSQCondition.o mimsCallback.o mimsTree.o mimsCondition.o mimsRule.o mimsRuleList.o mimsRecordSet.o -lclntsh -lm `cat /app/oracle/11g/lib/sysliblist` -lm -lpthread
mimsprocjj.o: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make: *** [dims0002] 오류 1
고수님들의 도움 부탁드립니다.
Forums:
mimsprocjj.o 파일이 현재 플랫폼(또는
mimsprocjj.o 파일이 현재 플랫폼(또는 컴파일러)에서 만들어진 것이 아니라,
현재 컴파일러 (cc)가 이해할 수 없는 포맷이라는 뜻입니다.
make -f dims0002_mk clean
을 해보시고, mimsprocjj.o 파일 등 .o 파일들이 지워지는지 확인해보세요..
지워졌다면 다시한번 make -f dims0002_mk 해보시고요,
지워지지 않았다면 .o 파일들을 일단 백업 받으신 이후에
직접 지우신 후 다시 make -f dims0002_mk 해보세요..
mimsprocjj.o를 지우고 다시 make를 했더니 결과가
PCC-S-02201, Encountered the symbol "extern" when expecting one of the following
:
, )
Error at line 0, column 0 in file mimsprocjj.pc
PCC-F-02102, Fatal error while doing C preprocessing
make: *** [mimsprocjj.o] 오류 1
make 어려운가요?
make 예전에 올리신, dims0001은 정상적으로 되던가요?
올려주신 make내 실행 명령문을 설명드리겠습니다.
( 잘못된 정보가 있을 수도 있습니다. )
앞서 답변하신 분의 내용과 같이, 링크할 대상 파일중 mimsprocjj.o 파일이 형식(format)이 맞지 않다는 오류 같습니다.
전에 올리셨던 make 파일에 대한 설명도 잠깐 드립니다.
make에서 clean 한다라고 하면, 위 make 파일에서 dims0001, dims0001.o, mimsUtil.o 가 대상인데, clean 이란 항목이 있어야 make clean 할 수 있습니다.
make에서 make clean, make all 같은 명령을 할 수 있으며, 위 파일에서는 make dims0001, make dims0001.o 형태로 호출 할 수 있습니다.
make 파일의 파일명이 Makefile이 아니므로, make -f dims0001_mk 형태로 사용한 것입니다. 즉, make -f dims0001_mk dims0001 형태로 호출 할 수 있습니다.
그래서, 하위에 정의된 dims0001, dims0001.o 등이 실제 작업해 해당하는 대상이며,
그 아래줄 proc, $(CC)가 쉘에서 실행하는 명령입니다.
파일명도 있고, 변수 내용을 사용한 부분도 있습니다.
위 내용중 $(CC) 항목은 CC라고 정의된 변수의 내용이 실행 명령이며, 변수로 사용되지 않은 proc는 일반 실행명령인 것입니다.
mimsprocjj.o 파일 역시, 또 다른 make 파일에서 생성한 것 같습니다.
-m32, -m64 부분이 비트수를 결정하는데, 링크시 영향을 미칩니다.
dims0001에서는 32 dims0002에서는 64라는 것이 이상합니다.
make 파일이 여러개 있다면, 순서를 알아야 할 것 같습니다.
혹은, make파일 안에서도 만드는 순서가 있을 수 있습니다.
--
http://www.dgkim.net/
dims0001_mk에서는 m64로 변경을 해서 make는 잘 진행되엇습니다.
PCC-S-02201, Encountered the symbol "extern" when expecting one of the following
:
, )
Error at line 0, column 0 in file mimsprocjj.pc
PCC-F-02102, Fatal error while doing C preprocessing
make: *** [mimsprocjj.o] 오류 1
위와 같은 오류가 발생됩니다.
파일 목록에 보안상 문제가 없다면 공개하시면 어떤가요?
현재 작업 디렉토리의 파일 목록을 올려주시는 것은 어떨까요?
전임자가 readme 같은 파일을 두지는 않았던가요?
파일 목록 같은 것을 보기 좋게 올리시려면 아래와 같은 태그로 싸면 좋습니다.
[ code ]
내용
[ /code ]
위 코드를 볼 수 있도록 공백을 넣은 것인데, 대괄호와 code 사이에 공백 없이 사용하면 됩니다.(미리보기 한번 해보십시오.)
readme 화일은 없습니다.
아래와 같은 화일들이 있습니다.
해결되었습니다.
1. *.o 화일들을 지우고,
2. pcscfg.cfg 화일에 /usr/include/linux를 추가해서 해결했습니다.
도와주신 여러분들께 감사드립니다.
짝퉁과 진퉁의 대결인가요=3
짝퉁과 진퉁의 대결인가요=3
농담입니다 지송요^^;;
진퉁님은 반갑습니다~~
kldp, okjsp 서식중입니다.
요즘 okjsp, kldp에 서식하고 답글을 간간히 달고 있습니다.
수고..
--
http://www.dgkim.net/
Makefile이 있네요.
전체 빌드를 위한 Makefile이 있는 것 같네요.
전체 빌드까지 완료하셨다면, 이제 질문은 없겠네요.
다른 서버에서 빌드하던 것을 가져왔고, (.o파일이 포함된 것)
하나 하나 문제를 잡아가시던 것 같네요.
일반적이라면, 아래 과정으로 끝날 것 같기도 하고.
1. Makefile 등에 oracle 경로를 수동으로 잡는다면 수정한다.
2. make clean 으로 빌드 결과물을 정리한다.
3. make all 으로 빌드한다.
첫번째 글을 다시 한번 보니. http://kldp.org/node/140634 pcscfg.cfg 파일은 Makefile에서 자동으로 만들어주는 파일 같습니다.
( 해주는 일은 ORACLE_HOME을 읽어서, 적당히 경로를 잡아주는 것일 것 같습니다. )
Makefile 을 한번 보여주실 수 있다면......
--
http://www.dgkim.net/
다시 글을 읽어보니, 해결은 아닌 것 같네요.
우선, 전체 백업을 하나 받아 두십시오.
소스 파일 흐름은 아마도 .pc -> .c -> .o -> dims0001 형태일 것입니다.
.pc 파일을 proc가 선행작업해서 .c 만들어 주고,
.c 파일을 컴파일러가 컴파일해서 .o 만들어 주고,
.o 파일을 링크해서 dims0001 형태로 만들 것입니다.
혹시, 작업 이력을 간단히 정리해 주실 수 있다면, 정리해 보시겠습니까?
--
http://www.dgkim.net/
댓글 달기