
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 파일을 컴파일하는 과정은 보통 다음 두 단계로 이루어진다
- Pro*C 파일(.pc)을 C 파일(.c)로 변환.
- 변환된 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의 필요성
- 자동화: Pro*C → C 변환, C 컴파일, 실행 파일 생성 과정을 한 번의 명령어로 처리.
- 경로 관리: Oracle 헤더 파일 경로, 라이브러리 경로를 쉽게 지정.
- 파일 의존성 관리: main.pc가 수정되었을 때만 다시 변환 및 컴파일 실행.
Makefile의 역할
Makefile은 Pro*C와 GCC를 연결하여 빌드 작업을 체계적으로 처리할 수 있다.
- Pro*C 변환 단계 실행 (proc 명령어 사용).
- 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만 사용
'Pro*C' 카테고리의 다른 글
[Pro*C 오라클 DB] 프로그램 오류 처리, 데이터 처리 (0) | 2025.01.16 |
---|---|
[Pro*C 오라클 DB] 호스트 변수 (배열, 구조체)를 이용한 프로그램 (0) | 2025.01.16 |
[Pro*C 오라클 DB] Pro*C 프로그램 구성과 DB접속 (0) | 2025.01.08 |
[Pro*C 오라클 DB] Pro*C 오류,에러 진단과 처리 (0) | 2025.01.06 |
[Pro*C 오라클 DB] Pro*C 시작 (1) | 2025.01.06 |