컴파일

본 장에서는 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.
항목 설명

파일 이름

에러가 발생한 파일 이름이다.

소스 위치

에러가 발생한 파일의 라인과 컬럼 위치이다.

에러 번호

에러를 구분하기 위한 일련 번호이다.

에러 종류

  • [I](Information) : 단순한 정보 메시지이며 컴파일이 정상적으로 수행된다.

  • [W](Warning) : 프로그램 수행에 지장을 주지 않는 에러를 나타내며, 원하는 결과가 나오지 않을 수 있다. 컴파일이 정상적으로 수행된다.

  • [E](Error) : 일반적인 에러를 나타낸다. 일반적으로 컴파일이 수행되지 않으며, 일부 에러는 컴파일이 수행되나 프로그램 실행 중 문제가 발생할 수 있다.

  • [S](Sever) : 중대한 에러로 컴파일이 수행되지 않는다.

에러 내용

에러에 대한 설명이다.