본문 바로가기

Pro*C

[Pro*C 오라클 DB] Pro*C 컴파일

pro*c

 


 

Pro*C 를 이용하여 실행파일을 만들기 위해서 3단게 작업을 거쳐야함

 

  • 1단계 : 오라클 Pre Compiler를 이용하여 소스 프로그램 생성
  • 2단게 : Compiler 사용 컴파일
  • 3단계 : Linker로 실행 가능한 프로그램을 생성한다
                링커는 라이브러리 호출을 해결하기 위하여 오라클 SQL 실행시간 라이브러리 호출
                 실핼 가능한 프로그램을 생성하기 위해 SQL 문장을 처리하는오라클 라이브러리 SQLLIB과 오브젝트코드                   를 처리

 

 

1. Pro*C Precompiler를 사용해 .pc 파일을 .c 파일로 변환

  • Pro*C 소스 파일(.pc)은 Oracle SQL과 C 코드를 혼합하여 작성됩니다.
  • proc 명령어를 사용하여 .pc 파일을 .c 파일로 변환합니다.
 
proc iname=source_file.pc oname=source_file.c include=/path/to/include

주요 옵션:

  • iname=source_file.pc: 변환할 Pro*C 소스 파일.
  • oname=source_file.c: 변환 후 생성될 C 소스 파일.
  • include=/path/to/include: Oracle 관련 헤더 파일이 포함된 디렉토리.

2. C 파일을 컴파일하여 오브젝트 파일 생성

  • Pro*C로 생성된 .c 파일은 일반 C 파일처럼 컴파일됩니다.
 
gcc -I/path/to/include -L/path/to/lib -o output_file source_file.c -lclntsh

주요 옵션:

  • -I/path/to/include: Pro*C에서 사용하는 헤더 파일 경로.
  • -L/path/to/lib: Oracle 라이브러리 경로.
  • -lclntsh: Oracle Call Interface(OCI) 라이브러리.

 

옵션

 

외부 지정 방식 구문

proc iname=test.pc option=value

 

컴파일을 위한 Make 파일 안에 기술하여 전역적으로 사용한다.

개별 프로그램 별로 다양한 옵션을 설정해야하는 경우 부적합


 

 

내부 지정 방식 구문

EXEC SQL OPTION(SELECT_ERROR_NO)

 

전체에 영향을 주지 않아 개별 프로그램 별로 다르게 옵션을 부여해야함

 


 

 

1. Makefile의 역할

Makefile은 여러 단계로 이루어진 빌드 작업을 자동화하기 위한 도구.
Pro*C 파일을 컴파일하는 과정은 보통 다음 두 단계로 이루어진다

  1. Pro*C 파일(.pc)을 C 파일(.c)로 변환.
  2. 변환된 C 파일을 컴파일하여 실행 파일 생성.

Makefile은 이 두 단계를 자동으로 실행하고 필요한 파일 경로와 옵션을 지정합니다.


2. Pro*C와 GCC의 관계

(1) Pro*C의 역할

  • Pro*C는 .pc 파일을 C 코드로 변환하는 도구
  • 결과로 생성된 .c 파일은 일반 C 프로그램처럼 컴파일할 수 있다

(2) GCC의 역할

  • GCC는 Pro*C로 변환된 .c 파일을 컴파일하고, Oracle 라이브러리와 링크하여 실행 가능한 프로그램을 만듬

(3) Pro*C와 GCC의 관계

  • ProC는 SQL 코드가 포함된 .pc 파일을 일반 C 코드로 변환
    이때 ProC가 헤더 파일, 매크로, SQL 문을 처리하여 .c 파일을 생성
  • GCC는 변환된 .c 파일을 컴파일하는 단계에서 사용

3. Makefile과의 관계

Makefile의 필요성

  1. 자동화: Pro*C → C 변환, C 컴파일, 실행 파일 생성 과정을 한 번의 명령어로 처리.
  2. 경로 관리: Oracle 헤더 파일 경로, 라이브러리 경로를 쉽게 지정.
  3. 파일 의존성 관리: main.pc가 수정되었을 때만 다시 변환 및 컴파일 실행.

Makefile의 역할

Makefile은 Pro*C와 GCC를 연결하여 빌드 작업을 체계적으로 처리할 수 있다.

  1. Pro*C 변환 단계 실행 (proc 명령어 사용).
  2. GCC를 사용하여 변환된 C 파일을 컴파일 및 링크.

4. Makefile의 구조

 

# Pro*C와 GCC 설정
PROC = proc                  # Pro*C 명령어
CC = gcc                     # C 컴파일러

# Oracle 경로
ORACLE_HOME = /path/to/oracle
INCLUDE = $(ORACLE_HOME)/precomp/public
LIB = $(ORACLE_HOME)/lib

# 플래그 설정
CFLAGS = -Wall -I$(INCLUDE)  # C 컴파일러 플래그
LDFLAGS = -L$(LIB) -lclntsh  # 링크 플래그

# 파일 정의
PC_SRC = main.pc             # Pro*C 소스 파일
C_SRC = $(PC_SRC:.pc=.c)     # 변환된 C 파일
OBJ = $(C_SRC:.c=.o)         # 오브젝트 파일
TARGET = my_program          # 최종 실행 파일

# 기본 규칙: 실행 파일 생성
all: $(TARGET)

# 1. Pro*C 변환 규칙
%.c: %.pc
	$(PROC) iname=$< oname=$@ include=$(INCLUDE)

# 2. C 컴파일 규칙
%.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $<

# 3. 실행 파일 생성 규칙
$(TARGET): $(OBJ)
	$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

# 4. 정리 규칙
clean:
	rm -f $(OBJ) $(C_SRC) $(TARGET)

 

 

Pro*C 변환

%.c: %.pc
    $(PROC) iname=$< oname=$@ include=$(INCLUDE)

.pc 파일을 .c 파일로 변환

내부적으로 실행되는 명령어
proc iname=main.pc oname=main.c include=/path/to/oracle/precomp/public

 

 

C 컴파일

%.o: %.c
    $(CC) $(CFLAGS) -c -o $@ $<
    
변환된 .c 파일을 컴파일하여 오브젝트 파일(.o)을 생성
    
내부적으로 실행되는 명령어
gcc -Wall -I/path/to/oracle/precomp/public -c -o main.o main.c

 

실행 파일 생성

$(TARGET): $(OBJ)
    $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

오브젝트 파일과 Oracle 라이브러리를 링크하여 실행 파일을 생성

내부적으로 실행되는 명령어
gcc -Wall -o my_program main.o -L/path/to/oracle/lib -lclntsh

 

정리

clean:
    rm -f $(OBJ) $(C_SRC) $(TARGET)
    
빌드 과정에서 생성된 모든 중간 파일(.o, .c, 실행 파일)을 삭제

 

 

5. 경로(Path) 설정

Makefile에서 ORACLE_HOME 경로와 관련된 부분은 Oracle 환경에서 필요한 파일들의 위치를 지정

  • $(ORACLE_HOME)/precomp/public는 Oracle 헤더 파일이 있는 경로
  • $(ORACLE_HOME)/lib는 Oracle 라이브러리가 있는 경로

 


6. Makefile 사용 방법

1.Makefile이 있는 디렉토리로 이동

더보기

cd /path/to/Makefile

 

2. make 명령어 실행

더보기

make

Pro*C → C 변환, C 컴파일, 실행 파일 생성 과정을 자동으로 처리

 

3.프로그램 실행

더보기

./my_program

 

4.빌드파일 정리

더보기

make clean

 

 

  • Makefile은 Pro*C와 GCC를 연결하는 도구
    proc으로 Pro*C 파일을 변환하고, GCC로 컴파일 및 링크 과정을 자동화
  • Makefile에서 **경로(Path)**는 Oracle 헤더 파일 및 라이브러리를 찾는 데 사용
  • Pro*C는 Makefile의 proc 단계에서만 필요하며, 변환된 후에는 GCC만 사용