2013년 6월 11일 화요일

AIX에서 PROC 에러나면 보기바람

복사[작성자께서 이글을 보시고 불편해 하시면 연락주세요..]

덕분에 좋은정보 감사드립니다...
개~~~~~~~~~~~발짜ㅡㅡ;
AIX 머신에서, 간단한 PC 파일을 만들어서 컴파일 해보았다.

ld: 0711-317 ERROR: Undefined symbol: .sqlcxt
ld: 0711-317 ERROR: Undefined symbol: .sqlglm
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.

이런 메시지가 나오네..
bit 가 안맞아서 그렇다고 한다.

===========================================

(AIX 5.1 as Oracle 9.2.0 client)

1. xlc:
-c(compile) 와 -o(link) 는 반드시 동일한 bit 모드에서 사용한다.
예를 들어 :
xlc -q64 -c vs. xlc -q64 -o --------> 64-bit 가 적용된다.
xlc -c vs. xlc -o --------------> 32-bit (default) 가 적용된다.
동일한 모드에서 컴파일 되지 않으면 다음과 같은 에러를 낸다.
---> XCOFF32/XCOFF64 error

2. library:
.o 와 .a 도 역시 같은 bit 모드에서 사용해야 한다.
같은 bit모드가 아니면 다양한 MISLEADING error message 를 보게 될 것이다.
예를 들어:

aa.o calls sub(). [32-bit]
sub() body is in libutil.a. [64-bit]
---> ld complains "sub() not found" in linking because
32-bit function call:sub() is DIFFERENT from
64-bit function body:sub()
(it won't display "XCOFF32/XCOFF64" err)

3. oracle library:
be careful in choosing oracle lib in editing .mk:
$ORACLE_HOME/lib/*.a ---> 64-bit (default)
$ORACLE_HOME/lib32/*.a ---> 32-bit

.o 와 오라클 라이브러리는 동일한 비트모드에서 사용해야 한다.
그렇지 않으면 "sqlcxt() not found" 와 같은 bit-mode inconsistency  에러를 보게 될 것이다.

=================================================

makefile 중에 -q64  내용을 추가했다.
잘되네...

-------------------------- Simple Makefile ------------------------------------
CC=cc
PROC=proc
CFLAGS=-q64
###########################
HOME=/home/project
ORACLE=/home/oracle_client/product
###########################
#LIB=-L$(HOME)/lib -lutil -L$(ORACLE)/lib -lclntsh
LIB=-L$(ORACLE)/lib -lclntsh
INC=-I$(HOME)/inc
#DEBUG=-D DEBUG
DEBUG=
PROCFLAGS=parse=full
PROCINC=include=$(HOME)/inc
all: test
test: test.pc
        $(PROC) $(PROCFLAGS) ${PROCINC} iname=$(@:=.pc)
        #$(CC) -c ${INC} $@.c $(DEBUG)
        #$(CC) $(CFLAGS) -o $@ $(CFLAGS) -c $@.c $(INC) $(LIB) $(DEBUG)
        $(CC) $(CFLAGS) -o $@ $@.c $(INC) $(LIB) $(DEBUG)
        mv -f $@ $(HOME)/bin
clean :
        rm -f ../lib/*.a
        rm -f *.lis
        touch *.c
        touch *.p

댓글 없음:

댓글 쓰기