proc & make 질문입니다.: c에서 proc 호출하기...
안녕하세요...
제가 하려는 것은 3개의 화일이 있습니다. A.c myProc.h myProc.pc
c 화일에서 proc를 호출하는것을 만드는 make를 만들려구 합니다.
A.c
#include
#include "myProc.h"
int main()
{
call_A();
socket(...);//socket통신을 위해서 make에서 -lnsl -lsocket필요
call_proc();
}
call_A(){....};
==================================
myProc.h
#incude
void call_proc();
void call_A();
===================================
myProc.pc
void call_proc(){ ...connectDB.. Select DB... Release.. }
===================================
이런 것을 만드려구 하는데요... 환경이 gcc 여서...
oracle/precomp/demo/ 의 demo.mk는 동작지 않았습니다.
http//database.sarang.net/database/oracle/oracle-general/gcc-proc
그래서 여기에서 ...받은 make 를 수정해서 사용하려구 하는데.
[위의 받은 make샘플은 제대로 동작하구요] 제대로 동작하지 않네요..
pc샘플은 sample2.pc 에서 main() ==> call_proc() 로 바꾸어서..사용하
였구요..
제가 수정한 부분을 확인부탁드립니다..
아직 make에 미흡해서... 어떻게 연결해야 할지...안 되는군요..(죄송)
CC=gcc
SAMPLES=mysample1
#samples $(SAMPLES)
#build $(OBJS)
# $(CC) -o $(EXE) $(OBJS) -L$(LIBHOME) $(PROLDLIBS)
#build_static $(OBJS)
# $(CC) -o $(EXE) $(OBJS) -L$(LIBHOME) $(STATICPROLDLIBS)
#$(SAMPLES) $(OBJECT_SAMPLES)
# $(MAKE) -f $(MAKEFILE) OBJS=$@.o EXE=$@ build
#============================> 위를 아래 처럼 수정하였습니다.
samples $(SAMPLES)
$(OBJS) mymain.o myProc.o
mymain $(OBJS)
[tab] $(CC) -o $* $(OBJS) -L$(LIBHOME) $(PROLDLIBS) -lnsl -lsocket
myProc.o myProc.pc myProc.h
mymain.o mymain.c myProc.h
#<==========================================
이렇게만 하면 되는 것으로 생각되는데.... 동작이 제대로 이루어 지지
않네요..
Re: proc & make 질문입니다.: c에서 proc 호출하기...
음.. 저는 오라클에서 제공하는 샘플 makefile이 영 맘에들지 않더라구요.
여러경우에 돌아갈 수 있도록 한 것은 좋은데,
정작 32bit를 64bit로 바꾼다든지, static 를 dynamic하게 바꾼다든지 하
려면 많은 삽질을 해야 되더라구요.
(물론 제가 잘 몰라서 그렇겠지요.. -_-;;)
makefile을 쓸 줄 아신다면 자기 환경에 맞도록 간략하게 만드시는 것도
좋을 듯 합니다.
말씀하신 사항으로 함 만들어 봤습니다.
CC = gcc로 바꾸시고, CFLAGS 적절하게 세팅하심 되겠습니다.
헤더파일 디펜던시 추가하시구요.
테스트는 안 해 보았습니다. 참고만 하십시오. -_-;;
CFLAGS 는 C 파일 컴파일시 주는 옵션이고,
PROCFLAGS는 Pro*C를 이용해 프리컴파일할 때 주는 옵션이고,
PCCFLAGS는 Pro*C를 이용해 프리컴파일된 C 파일을 컴파일할 때 주는 옵션
입니다.
LDFLAGS는 링커(ld) 에게 주는 플래그입니다.
#####################################################################
###
# Makefile
#####################################################################
###
include $(ORACLE_HOME)/precomp/lib/env_precomp.mk
CC = cc
PROC = $(ORACLE_HOME)/bin/proc
ORACLE_LIBDIR = $(ORACLE_HOME)/lib
INCL = -I$(HOME)/include -I.
PROCINCL = -I$(ORACLE_HOME)/precomp/public
PROCFLAGS = LINES=YES CODE=ANSI_C
CFLAGS = -g
LDFLAGS =
PCCFLAGS = $(CFLAGS) $(PROCINCL) $(INCL)
PROCLIB = -L$(ORACLE_LIBDIR) -lclntsh -lcore8 \
`cat $(ORACLE_LIBDIR)/sysliblist`
MYLIB = -lnsl -lsocket
#####################################################################
###
.SUFFIXES .pc .c .o .typ .h
.pc.o
$(PROC) $(PROCFLAGS) iname=$*
$(CC) $(PCCFLAGS) -c $*.c
.c.o
$(CC) $(CFLAGS) $(INCL) -c $*.c
#####################################################################
###
DBSRC = myProc.pc
DBCSRC = ${DBSRC.pc=.c}
CSRC = myMain.c
OBJS = ${CSRC.c=.o} ${DBSRC.pc=.o}
TARGET = myprog
#####################################################################
###
all $(TARGET)
$(TARGET) $(OBJS)
$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $(OBJS) $(PROCLIB) $(MYLIB)
-@rm $(DBCSRC) > /dev/null 2>&1
clean
-@rm $(TARGET) $(OBJS) $(DBCSRC) core >/dev/null 2>&1
댓글 달기