컴파일
본 장에서는 OpenFrame PL/I를 사용하여 프로그램을 컴파일하는 방법과 컴파일할 때 출력되는 에러 메시지에 대해 설명한다.
1. 컴파일 실행
PL/I 소스 파일을 컴파일하면 OpenFrame에서 사용하기 위한 공유 라이브러리가 생성된다.
다음의 3가지 방법으로 컴파일할 수 있다.
-
static link를 사용한 컴파일 방법
static link를 사용해서 여러 개의 파일을 한 번에 컴파일해서 하나의 공유 라이브러리로 생성할 수 있다.
다음은 file1.pli, file2.pli, file3.pli를 컴파일하여 하나의 libtest.so를 생성하는 예이다. 컴파일할 때 -I 옵션을 사용하여 INCLUDE 파일이 있는 디렉터리를 현재 디렉터리 아래의 inc 디렉터리로 설정하였다.
ofpli file1.pli file2.pli file3.pli -o libtest.so -I./inc
-
dynamic link를 사용한 컴파일 방법
소스 파일을 컴파일할 때 외부 공유 라이브러리를 링크하여 새로운 공유 라이브러리를 생성할 수 있다.
다음은 file.pli를 컴파일할 때 $OFPLI_HOME/lib에 있는 libtest.so를 링크하여 libfile.so를 생성하는 예이다.
ofpli file.pli -o libfile.so -L$OFPLI_HOME/lib -ltest -I./inc
-
dynamic loading을 사용한 컴파일 방법
소스 파일을 컴파일할 때는 링크하지 않고, 실행 시간에 동적으로 적재하여 호출하는 기능을 활성화하여 공유 라이브러리를 생성할 수 있다. 동적 적재 호출 기능을 사용할 경우 컴파일할 때 라이브러리 링크를 하지 않아도 된다. 단, 호출하는 함수가 동적으로 결정되는 경우에는 불가능하다.
다음은 file.pli를 컴파일할 때 동적 적재 호출 기능을 활성화하여 libfile.so를 생성하는 예이다.
ofpli file.pli -o libfile.so -U
1.1. 컴파일 명령어
다음은 컴파일 명령어 ofpli의 사용 방법이다.
-
사용법
ofpli 소스 파일 ... [명령 옵션...]
-
소스 파일
컴파일을 수행할 소스 파일들을 기술한다.
-
소스 파일을 컴파일하는 기본 명령어 옵션
옵션 설명 -o 파일이름
결과 출력 파일을 설정한다.
-I <dir>
INCLUDE 디렉터리를 설정한다.
-MI <dir>
%INCLUDE 문장에서 사용할 INCLUDE 디렉터리를 설정한다.
-SI <dir>
EXEC SQL INCLUDE 문장에서 사용할 INCLUDE 디렉터리를 설정한다.
-l <library>
공유 라이브러리를 연결한다.
-L <dir>
라이브러리 경로를 설정한다.
-O0, -O1, -O2, -O3
최적화 레벨을 설정한다. 숫자가 낮을수록 컴파일은 빠르지만 실행할 때 느릴 가능성이 있다.
-U
동적 적재 호출 기능을 활성화시킨다.
-g
소스 레벨 디버깅을 위한 디버깅 정보를 컴파일 결과 파일에 삽입한다.
--change old:new
외부 엔트리 이름을 old에서 new로 변경한다.
--disable-inc-limit
%INCLUDE statement의 파일 글자수 제한을 해제한다.
--dli
DLITPLI 인터페이스를 추가한다. (IMS 전용)
--enable-cics
CICS 전처리기를 활성화시킨다.
--enable-esql-oracle
Oracle ESQL 전처리기를 활성화시킨다.
--enable-esql-tibero
Tibero ESQL 전처리기를 활성화시킨다.
--enable-ofasm
OpenFrame ASM를 이용하여 ASM을 호출할 경우 지정한다.
--enable-scan-extascii
Extended-ascii 문자를 인식하도록 설정한다. --enable-scan-sjis 옵션과 같이 사용할 수 없다.
--enable-scan-sjis
Shift-JIS 문자를 인식하도록 설정한다. --enable-scan-extascii 옵션과 같이 사용할 수 없다.
--fixeddec31
FIXED DECIMAL 변수의 최대 정밀도를 31로 지정한다.
--rule-margin-s
소스 기술영역 외 공백이 아닌 문자가 있을 경우 에러 메시지를 출력한다.
--rule-margin-w
소스 기술영역 외 공백이 아닌 문자가 있을 경우 경고 메시지를 출력한다.
--system-cics
PL/I 프로그램이 실행되는 시스템 환경을 CICS로 지정한다.
--system-ims
PL/I 프로그램이 실행되는 시스템 환경을 IMS로 지정한다.
--system-mvs
PL/I 프로그램이 실행되는 시스템 환경을 MVS로 지정한다. (기본값)
--trace
프러시저의 시작과 끝, 매개변수, 반환 값에 대한 trace 정보를 출력한다.
--trace-flow
프러시저의 시작과 끝에 trace 정보를 출력한다.
--trace-param
매개변수 값에 대한 trace 정보를 출력한다.
--trace-return
반환 값에 대한 trace 정보를 출력한다.
--h, --help
도움말을 출력한다.
--help-esql
ESQL 전처리기의 도움말을 출력한다.
--license
OpenFrame PL/I의 라이선스 정보를 출력한다.
--save-temps
컴파일할 때 생성되는 임시 파일들을 삭제하지 않고 남겨둔다.
명령어 옵션으로 생성되는 임시 파일들은 다음과 같다.
-
.mp : SQL 전처리기나 CICS 전처리기가 활성화된 경우만 생성되는 macro 전처리 결과 파일
-
.pp : 전처리가 최종적으로 완료된 전처리 결과 파일
-
.bc : 컴파일 결과 파일
-
.o : 어셈블리 결과 파일
--version
OpenFrame PL/I의 버전 정보를 출력한다.
-
-
소스 파일을 ESQL 전처리하는 명령어 옵션
옵션 설명 --close-on-commit
커밋을 할 때 커서를 자동으로 닫도록 지정한다.
--end-of-fetch (1403 | 100)
SQL 문장을 수행한 후 END-OF-FETCH 상황에서 사용자에게 반환할 SQLCODE 값을 지정한다. (기본값: 1403)
--insert-no-data-error
INSERT, SELECT 구문을 사용할 경우에도 "no data found"가 발생하도록 지정한다.
--no-select-error
호스트 변수 등으로 인해 주어진 수행 결과 개수보다 실제로 질의를 수행한 결과가 더 많이 반환된 경우 에러를 발생시키도록 지정한다.
--picx (CHARF | VARCHAR2)
PL/I CHAR 타입의 SQL 데이터 타입을 지정한다. (기본값 CHARF)
--prefetch N
커서를 오픈할 때 속도 향상을 위해 몇 개의 로우를 미리 가져올지 지정한다.
--unsafe-null
지시자 변수가 없을 때 NULL 값을 허용하도록 지정한다.
-
1.2. 컴파일 에러 메시지
OpenFrame PL/I은 컴파일을 수행할 때 에러가 발생할 경우 에러 메시지를 출력한다.
에러 메시지 구조는 다음과 같다.
SAMPLE.pli 6:11 : OFPLI1009 [S] Syntax error. [파일 이름] : SAMPLE.pli [소스 위치] : 6:11 [에러 번호] : OFPLI1009 [에러 종류] : [S] [에러 내용] : Syntax error.
항목 | 설명 |
---|---|
파일 이름 |
에러가 발생한 파일 이름이다. |
소스 위치 |
에러가 발생한 파일의 라인과 컬럼 위치이다. |
에러 번호 |
에러를 구분하기 위한 일련 번호이다. |
에러 종류 |
|
에러 내용 |
에러에 대한 설명이다. |