
덕분에 좋은정보 감사드립니다...
개~~~~~~~~~~~발짜ㅡㅡ;
1. xlc:
-c(compile) 와 -o(link) 는 반드시 동일한 bit 모드에서 사용한다.
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.
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) 가 적용된다.
동일한 모드에서 컴파일 되지 않으면 다음과 같은 에러를 낸다.
xlc -q64 -c vs. xlc -q64 -o --------> 64-bit 가 적용된다.
xlc -c vs. xlc -o --------------> 32-bit (default) 가 적용된다.
동일한 모드에서 컴파일 되지 않으면 다음과 같은 에러를 낸다.
---> XCOFF32/XCOFF64 error
2. library:
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
예를 들어:
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
PROC=proc
CFLAGS=-q64
###########################
HOME=/home/project
ORACLE=/home/oracle_client/product
###########################
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
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
$(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
rm -f ../lib/*.a
rm -f *.lis
touch *.c
touch *.p
댓글 없음:
댓글 쓰기