· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Free Pascal/Users Guide

FreePascal: 사용자 설명서


Users' manual for Free Pascal, version 1.00.0 1.8
http://www.jp.freepascal.org/mirror/fpc/docs-html/user/user.html

Michaël Van Canneyt
Florian Klämpfl

내용


  1. 소개
    1. 이 문서에 대해
    2. 컴파일러에 대해
    3. 더 많은 정보 얻기
  2. 컴파일러 설치
    1. 설치하기 전: 요구사항
      1. 시스템 요구사항
      2. 소프트웨어 요구사항
    2. 컴파일러 설치하기
      1. 도스 또는 윈도우에서 설치하기
      2. 리눅스에서 설치하기
    3. 선택적인 설정 단계
    4. 컴파일러 테스트하기
  3. 컴파일러 사용법
    1. 파일 찾기
      1. Command line files
      2. Unit files
      3. Include files
      4. Object files
      5. Configuration file
      6. 긴 파일 이름에 대해
    2. 프로그램 컴파일하기
    3. 유닛 컴파일하기
    4. 유닛과 라이브러리, 스마트링킹
    5. GO32VI와 PMODE/DJ용 실행파일 만들기
      1. GO32V1
      2. PMODE/DJ
    6. 프로그램의 크기 줄이기
  4. 컴파일 관련 문제
    1. 일반적인 문제
    2. DOS상에서 발생할 가능성이 있는 문제
  5. 컴파일러 설정
    1. 커맨드 라인 옵션 사용하기
      1. 일반적인 옵션들
      2. 피드백을 얻기 위한 옵션들
      3. 파일과 디렉토리에 관한 옵션들
      4. 출력결과의 종류를 제어하는 옵션들
      5. 소스파일에 관한 옵션들(language options)
    2. 설정 파일 사용하기
      1. #IFDEF
      2. #IFNDEF
      3. #ELSE
      4. #ENDIF
      5. #DEFINE
      6. #UNDEF
      7. #WRITE
      8. #INCLUDE
      9. #SECTION
    3. Variable substitution in paths
  6. 터보 파스칼 코드 포팅하기
    1. 작동하지 않는 것
    2. 특별한 것들
    3. 터보 파스칼 호환성 모드
    4. 도스 상에서 긴 파일 이름에 대해 참고할 사항
  7. 프리 파스칼에 딸려있는 유틸리티와 유닛
    1. 데모 프로그램과 예제
    2. 지원되는 프로그램
      1. ppudump program
      2. ppumove program
      3. ptop - 파스칼 소스를 아름답게
      4. rstconv program
      5. fpcmake
    3. 지원되는 유닛
      1. 모든 플랫폼에 공통되는 유닛
      2. DOS 상에서
      3. Windows 상에서
      4. Linux 상에서
      5. OS/2 상에서
  8. 프로그램 디버깅하기
    1. 디버거 지원 컴파일하기
    2. gdb 사용하여 디버그하기
    3. gdb로 디버깅할 때의 경고사항
    4. Support for gprof, the GNUprofiler
    5. 힙 메모리 유출 검사하기
    6. 런타임 에러 추적에서의 라인 번호
    7. heaptrc와 lineinfo 결합시키기
  9. 프리 파스칼에서의 CGI 프로그래밍
    1. 데이터 얻기
      1. Standard input으로 들어오는 데이터
      2. 환경변수로 통과되는 데이터
    2. 아웃풋 생성하기
    3. 윈도우를 쓰고 있소. 그러면?

  1. 커맨드 라인 옵션의 알파벳 순서 리스트
  2. 예악어의 알파벳 순서 리스트
  3. 컴파일러 메세지
    1. 일반적인 컴파일러 메세지
    2. Scanner 메세지
    3. Parser 메세지
    4. 타입 검사 오류
    5. Symbol handling
    6. Code generator 메세지
    7. 어셈블링/링킹 단계에서의 오류
    8. 유닛 로딩 메세지
    9. Command-line handling errors
    10. Assembler reader errors.
      1. General assembler errors
      2. I386 specific errors
      3. m68k specific errors.
  4. 런타임 오류
  5. The Floating Point Coprocessor emulator
  6. A sample gdb.ini file



1. 소개


1.1 이 문서에 대해

이 문서는 Free Pascal 사용자를 위한 설명서입니다. 이 문서에서는 Free Pascal 컴파일러가 지원되는 플랫폼에서의 설치와 사용법을 기술하였습니다. 그렇지만 지원되는 모든 명령들을 피곤하게 나열하려 하거나 파스칼 언어의 정의에 대해서 쓰려는 시도는 하지 않았습니다. 그런 것들은 FreePascal/ReferenceGuide를 참고하십시오. 컴파일러의 가능성이나 내부 작동 등에 관해 알고 싶으시다면 FreePascal/ProgrammersGuide를 참고하십시오. 이 문서의 부록에는 예약어 리스트와 컴파일러 오류 메세지를 설명과 함께 나열해 놓았습니다.

이 문서에는 컴파일러와 기능들에 대해서 기술해 놓았습니다. 컴파일러는 현재도 계속 개발되고 있기 때문에 여기에 기술되어 있는 몇몇 설명들은 이미 옛날 얘기가 되었을 수도 있습니다. 의심이 가는 경우가 있으시다면 컴파일러와 함께 배포되는 README 파일을 참고하십시오. README 파일이 이 문서에 기술된 내용과 다를 시에는 README 파일이 좀더 신뢰성이 있습니다.

1.2 컴파일러에 대해

Free Pascal은 i386과 m68k 프로세서용 32비트 컴파일러입니다. 현재 Free Pascal은 7개의 운영체제를 지원합니다.

  • DOS
  • LINUX
  • ATARI(version 0.99.5 only)
  • AMIGA(version 0.99.5 only)
  • WINDOWS
  • OS/2(using the EMX package, so it also works on DOS/Windows)
  • FREEBSD(usable, but still under development).

Free Pascal은 가능한 한 소스 코드가 Turbo Pascal 7.0, Delphi 5와 호환가능 하도록 설계되었습니다.(물론 아직은 다소 미흡합니다만) 하지만 Free Pascal은 이 컴파일러들보다 함수 오버로딩 등을 통해 더 강력해졌습니다. 그리고 다양한 플랫폼을 지원합니다.

그리고 Free Pascal은 위의 컴파일러들에서의 유닛들이 다만 한 시스템에서만 사용가능했던 문제를 해결하였습니다.

또한 현재, Free Pascal에는 아주 초기 단계의 IDE(Integrated Development Environment; 통합 개발 환경)만이 제공되고 있습니다. (이 문서가 만들어지던 당시의 얘기입니다)


Free Pascal은 세부분으로 이루어져 있습니다.
  1. 컴파일러.
  2. RTL(Run-Time Library).
  3. 유틸리티와 유닛.

컴파일러를 사용하기 위해서 1번과 2번은 꼭 필요합니다. 이 문서에서는 1. 컴파일러에 대해서 설명할 것이고 2. RTL은 FreePascal/ReferenceGuide에서 설명합니다.

1.3 더 많은 정보 얻기

만약에 문서가 원하는 답을 주지 못한다면 아래의 인터넷 주소를 통해서 더 많은 정보를 얻을 수 있습니다.

위의 두 사이트 및 다른 사이트에서는 Free Pascal 배포판을 다운로드 받으실 수 있습니다.

마지막으로 이 설명서에 추가해야할 사항이 있다면 michael at freepascal dot org로 주저하지 마시고 메일 보내주십시오.

자, 이제 뭔가 유용한 걸 알아봅시다. --여기까지 2005.1.5

2. 컴파일러 설치


2.1 설치하기 전: 요구사항


2.1.1 하드웨어 요구사항


  1. CPU : 인텔 80386, 혹은 그보다 상위 기종의 프로세서가 필요합니다. 코프로세서는 필요하지 않습니다 - 코프로세서가 없더라도 소수점 연산이 필요한 경우에는 에뮬레이션 기능이 사용됩니다.

  2. 최소 32MB의 메모리가 필요합니다.

  3. 최소 8MB 이상의 디스크 공간이 필요합니다.

2.1.2 소프트웨어 요구사항


  • DOS 환경

도스 환경에서는 필요한 파일이 모두 준비되어 있습니다.

  • UNIX 환경

UNIX 환경 (LINUX 환경 포함) 에서는 다음의 프로그램들이 설치되어 있어야 합니다.

  1. GNU as (GNU 어셈블러)
  2. GNU ld (GNU 링커)
  3. (생략 가능) GNU make - 간편한 recompiling과 Run-Time 라이브러리를 위해 필요합니다.

  • Windows 환경

Windows 환경에서는 필요한 파일이 모두 준비되어 있습니다. 그러나 mingw32나 cygwin 개발툴이 설치되어 있는 것이 좋습니다. http://www.freepascal.org 에서 구할 수 있습니다.

  • OS/2 환경
Free Pascal 배포버전이 필요한 툴을 모두 포함하고 있지만, EMX 확장툴을 설치하는 것이 좋습니다. 이것은 Free Pascal 컴파일러가 실행되는 중에 소스코드를 컴파일하고 실행할 수 있게 해 줍니다. http://www.leo.org/pub/comp/os/os2/leo/gnu/emx gcc/index.html 에서 입수할 수 있습니다.

2.2 컴파일러 설치하기


Free Pascal의 설치는 매우 쉽습니다만, 그 방법은 운영체제에 따라 다릅니다. 각각의 운영체제에 따른 설치 방법은 다음과 같습니다.

2.2.1 도스 또는 윈도우에서 설치하기


  1. 필수 과정

우선 최신 Free Pascal 배포파일을 다운받습니다. 압축된 ZIP 파일 하나를 받거나, 몇 개로 분리된 컴파일러 구성 파일들만을 따로 따로 받을 수도 있습니다 - 이 방식은 속도가 느린 네트워크에서 여러 대의 컴퓨터에 컴파일러를 설치해야 할 때 매우 좋은 방법입니다만, 컴파일러의 일부 구성 파일들만을 설치하고자 할 때에도 유용합니다. ZIP 파일은 INSTALL.EXE 파일을 포함하고 있습니다. 컴파일러를 설치하기 위해, 이 파일을 실행하십시오.

Swing Fixer 주 - 두 장의 그림이 있습니다만, 링크가 잘못되었는지 화면에 나타나지 않으므로 그림에 대한 내용은 생략합니다

컴파일러를 설치하는 과정에서, 다음에 언급되는 내용들을 설정할 수 있습니다.

  • 설치하고 싶은 구성요소들을 선택할 수 있습니다 - 즉, 소스코드나 도움말 문서가 필요하지 않다면 선택하지 않을 수 있습니다. 단, 컴파일러 구성 파일들을 따로 따로 다운받은 경우라면, 다운받지 않은 구성 요소는 설치할 수 없습니다.

  • 컴파일러가 설치될 디렉토리를 선택할 수 있습니다. (기본값은 C:\PP 입니다).

운영체제의 어느 디렉토리에 있던 간에 Free Pascal을 자유롭게 실행하기 위해서는 C:\PP\BIN 디렉토리를 경로변수에 포함시켜야 합니다. 이를 위해 AUTOEXEC.BAT 파일의 맨 마지막에 다음 문장을 추가하십시오.

SET PATH=%PATH%;C:\PP\BIN

(만일 컴파일러가 설치된 디렉토리가 C:\PP 가 아니라면, \BIN 앞부분은 컴파일러가 설치된 디렉토리로 고쳐야 합니다)

그래픽 카드 드라이버를 사용하고 싶다면, 환경변수 GO32를 고쳐야 합니다. 이를 위한 설명은 Graph 유닛에 대한 설명서에 자세히 언급되어 있습니다 - InitGraph 프로시저에 대한 설명을 찾아보시기 바랍니다.


  1. 선택적인 과정 - 코프로세서 에뮬레이션

Free Pascal은 소숫점 연산을 위해 코프로세서를 사용합니다. 따라서 코프로세서가 없는 CPU를 사용할 경우에는 코프로세스 에뮬레이션 기능을 함께 설치하여야 합니다. DOS 나 Windows 환경에서는 INSTALL.EXE에서 코프로세서 에뮬레이션 기능을 설치할 것인지 선택할 수 있습니다.


2.2.2 리눅스에서 설치하기


  1. 필수 과정

Free Pascal 의 리눅스용 배포판에는 세 가지 형태가 있습니다.

  • .tar.gz (개별 파일로도 다운받을 수 있습니다)
  • .rpm (Red Hat Package Manager)
  • .deb (debian)

세 ≠?모두 ELF 버전의 컴파일러 바이너리 파일과 유닛 파일을 포함합니다. aout 바이너리 파일은 배포되지 않습니다 - 시스템에서 aout 바이너리 파일을 재컴파일할 수 있더라도. Swing Fixer 주 - 급하게 고치느라 번역이 약간 매끄럽지 못하군요. 원문은 the older aout binaries are no longer distributed, although you still can use the comiler on an aout system if you recompile it. 입니다.

.rpm 형식을 사용한다면 반드시 다음과 같은 형식으로 설치해야 합니다.

rpm -i fpc-pascal-XXX.rpm

(XXX는 .rpm파일의 버전을 뜻합니다. 간단하게 말해서, 다음과 같이 하면 됩니다. rpm -i 려받은 rpm 파일의 파일명)

devian 형식을 사용한다면, 반드시 다음과 같은형식으로 설치해야 합니다.

dpkg -i fpc-XXX.deb

(XXX는 devian 파일의 버전을 뜻합니다. 간단하게 말해서, 다음과 같이 하면 됩니다. dpkg -i 려받은 devian 파일의 파일명)

RPM이나 Devian 형태의 패키지로 된 Free Pascal을 설치하기 위해서는 ROOT 계정에 억세스할 수 있는 권한이 필요합니다. 만일 ROOT 계정에 억세스할 권한이 없을 경우에는 .tar 파일을 사용하여 설치하면 됩니다.

Swing Fixer 주 - 이 부분에서 약간 이상하군요. 앞 부분의 설명에서는 .tar.gz 파일을 언급했었는데 말입니다. 일단은 밀고 나가겠습니다. 퇴프 질문 : .tar.gz에서 압축만 해제하면 .tar아닌가요? 그럼 굳이 .tar.gz이라고 할 필요가 없을듯 한데요. .tar.gz은 단순히 .tar를 압축했는가 안했는가의 차이 뿐이니까요.

.tar 파일이나, 개별로 분리된 파일을 받았을 때, 설치 과정은 보다 복잡해집니다.

.tar 파일을 받았을 경우, 우선 쓰기 권한이 있는 디렉토리로 .tar 파일을 옮긴 뒤, 다음과 같은 방식으로 압축을 해제합니다.

tar -xvf fpc.tar

(앞에서와 마찬가지로, 다운받은 파일의 이름을 fpc.tar로 가정했습니다. 파일 이름이 다르면 fpc.tar 이 부분만 고치시면 됩니다.)

압축을 해제하면, 수많은 압축파일들과 쉘 스크립트로 작성된 설치 프로그램이 나옵니다.

만일 개별로 분리된 파일을 받았을 경우, 최소한 install.sh 파일과 libs.tar.gz 파일 (라이브러리 파일입니다) 은 반드시 필요합니다.

Free Pascal을 설치하기 위해 아래 명령을 입력합니다.

./install.sh

그러면 다음의 두 가지 질문이 나옵니다.

  1. 어느 디렉토리에 설치할 것인가? Swing Fixer 주 - 원문은 Places where you can install different things. 입니다.
  2. 어떤 구성요소들을 설치할 것인가? (소스코드나 데모 프로그램과 같은 것들을, 필요하다면 설치하지 않을 수 있습니다)

스크립트는 자동으로 어떤 구성요소가 설치가능한지를 검색합니다 - 개별 파일로 받은 경우에는 이 과정이 반드시 필요할 것입니다. 스크립트가 자동으로 설치가능한 구성요소를 검색할 수 있게 하기 위해, - 특히 개별 파일로 받은 경우 - 받은 파일의 이름을 절대로 변경해서는 안됩니다.

ROOT 계정의 권한으로 설치 스크립트를 실행하면 스크립트가 지원하는 모든 기본 설치를 할 수 있습니다. 그러나 ROOT 계정의 권한이 없다면, FREE PASCAL이 설치될 디렉토리로 쓰기 권한이 있는 디렉토리를 지정해야만 합니다. 물론, 원칙적으로는 사용자가 원하는 어떤 디렉토리에도 설치할 수 있습니다.

Swing Fixer 주 - 이하의 부분은 시간 관계상 마저 고치지 못했습니다. ^^;;;

설치의 마지막으로 설치프로그램은 Free Pascal 옮김틀이 사용자가 선택한 설정에 반응하기 위한 설정파일을 만든다

. 이 파일은 /etc 디렉토리(최고관리자로서가 아니라면 이것은 실패할 수 있다)와 자료를 설치한 디렉토리에 설치될

것이다

Free Pascal 옮김틀을 이 설정과 함께 사용하고싶다면 /etc에 존재하거나 환경변수 PPC_CONFIG_PATH를 설정할 수 있

다. CSH에서 아래를 추가하면 된다.

setenv PPC_CONFIG_PATH /usr/lib/ppc/0.99.14

사용자의 기본 디렉토리를 .login 파일에 추가하라. (다음 장을 보라)

2.3 선택적인 설정 단계

어느 플랫폼에서든지 컴파일러를 설치하고 난 다음에 환경 변수 설정을 할 수 있습니다. Free Pascal 컴파일러에는 다음과 같은 환경 변수가 있습니다.
  • PPC_EXEC_PATH: 'as'와 'ld' 파일이 있는 디렉토리. (기본값 /usr/bin)
  • PPC_GCCLIB_PATH: libgcc.a가 있는 디렉토리 (기본값 없음). Linux에만 해당하는 사항.
  • PPC_CONFIG_PATH: ppc386.cfg를 찾을 경로 (LINUX에서는 /etc가 기본값)
  • PPC_ERROR_FILE: error-definition 파일이 있는 디렉토리 (기본값 /usr/lib/fpc/errorE.msg)

위의 경로들은 설치 과정의 마지막 단계에서 만들어지는 샘플 설정 파일에 PPC_CONFIG_PATH를 제외하고(만약에 기본 설치 위치가 아닌 곳에 설치했다면 반드시 설정해줘야 합니다)는 이미 설정되어 있습니다.

2.3.0.1 마지막으로

Free Pascal에는 README 파일도 함께 배포됩니다. 여기에는 Free Pascal 설치에 대한 최신 정보가 들어있으므로 반드시 먼저 읽어보셔야 합니다.

2.4 컴파일러 테스트하기

설치와 환경 변수 설정이 되고 나면 드디어 프로그램을 컴파일해볼 수 있습니다.

Free Pascal 배포판에는 컴파일러가 무엇을 할 수 있는지 보여줄 데모 프로그램들이 몇 개 들어있습니다. 이 프로그램들을 컴파일 해봄으로써 컴파일러가 제대로 작동하는지 확인해볼 수 있습니다.

컴파일러 이름은 아래와 같습니다.

  • ppc386: LINUX 버전
  • PPC386.EXE: 이 외의 시스템에서

프로그램을 컴파일 하기위해서 (예를 들면 demo\hello.pp) 커맨드 프롬프트에서 간단히 아래와 같이 입력합니다 :

ppc386 hello

만약에 설정 파일이 없다면 컴파일러에 유닛을 어디서 찾아야할지 (DOS에서는) 아래와 같이 지시해줄 수 있습니다.

ppc386 -Fuc:\pp\units\go32v2\rtl hello

LINUX 상에서는 아래와 같이 입력할 수 있습니다.

ppc386 -Fu/usr/lib/fpc/0.99.14/units/linux/rtl hello

이건 물론 C:\PP 또는 /usr/lib/fpc/0.99.14에 설치했다는 가정 하에서 입니다.

만약에 오류 메시지가 나오지 않는다면 컴파일러는 LINUX에서는 확장자 없이 hello라는 파일을, DOS에서는 hello.exe라는 실행파일을 생성했을 것입니다.

프로그램을 실행시키기 위해서는 간단히 아래와 같이 입력하십시오.

hello

만약 일이 잘 되었다면 아래와 같은 친근한 환영 인사 :) 를 받을 수 있을 것입니다.

Hello world

3. 컴파일러 사용법


여기에는 프로그램과 유닛을 컴파일하기 위한 필수적인 사항을 설명할 것입니다. 또한 DOS에서 stand-alone 실행파일을 만들기 위한 방법을 설명할 것입니다. 컴파일러의 좀 더 고급스럽게 사용하고 싶다면 컴파일러 설정하기 섹션과 FreePascal/Programmers' guide을 참고하십시오.

이 섹션의 예제들은 제대로 설정되었으며 최소한 RTL 유닛의 패스가 잡혀있는 ppc386.cfg 파일이 있다는 가정 하에 만들어져 있습니다. 기본적으로는 이 파일은 설치 프로그램에 의해 만들어 집니다. 그렇지만 위치가 제대로 적혀 있는지 확인해 보십시오(관련 섹션 참고)

3.1 파일 찾기

프로그램이나 유닛 컴파일을 시작하기 전에 컴파일러가 소스 파일이나 다른 파일을 어디서 찾는지 아는게 중요합니다. 이 섹션에서 우리는 이것에 대해 설명하고 또 이것이 어떤 영향을 줄 수 있는지 말할 것입니다.

* 주의: 디렉토리 분리자로써 슬래쉬와 (/)나 역슬래쉬 (\) 중 어느 것을 쓰던지 상관없습니다. 컴파일러가 알아서 할 것입니다. 예제에서는 LINUX에서 문제를 피하기 위해서 슬래쉬(/)를 사용할 것입니다.

3.1.1 Command line files

커맨드 라인에 입력한 파일명, 예를 들어

ppc386 foo.pp

이렇게 쓴다면 ‘’‘현재’‘’ 디렉토리에서만 파일을 찾으려고 할 것입니다. 파일명에 디렉토리를 같이 기재한다면 컴파일러는 그 파일을 그 디렉토리에서 찾으려고 할 것입니다.

ppc386 subdir/foo.pp

이렇게 입력하면 foo.pp를 현재 디렉토리의 서브디렉토리 subdir에서 찾을 것입니다.

Under LINUX, the name of this file is case sensitive, under other operating systems (DOS, WINDOWS NT, OS/2) this is not the case. -> 무슨 말이죠?;; --슈로페 리눅스에서는, 파일 이름의 대소문자를 구별하지만, 다른 운영체제, 즉 도스, 윈도우즈, OS/2에서는 대소문자 구별을 하지 않는다.

3.1.2 Unit files


다른 유닛을 필요로 하는 유닛이나 프로그램을 컴파일할 때 컴파일러는 아래의 경로에서 컴파일된 이런 유닛들을 찾으려할 것입니다.
  1. 현재 디렉토리
  2. 컴파일러 실행파일이 있는 곳 (LINUX에서는 아님)
  3. 찾을 경로에 있는 모든 디렉토리

유닛을 찾을 경로에 -Fu 옵션을 사용하여 디렉토리를 추가할 수 있습니다. 참고로, 마지막으로 추가된 경로는 가장 먼저 검색할 대상이 됩니다.

컴파일러는 기본적으로 몇몇 경로를 유닛을 찾을 경로에 추가해 둡니다.
  1. 환경 변수 XXUNITS에 있는 내용, XX는 다음과 같은 지원되는 대상을 의미합니다: GO32V2, LINUX, WIN32, OS2.
  2. 기본 유닛 디렉토리. FPCDIR 환경 변수에 기재되어 있습니다. 이 환경 변수가 설정되어 있지 않다면 기본적으로 아래 위치가 됩니다.
    • LINUX에서: /usr/local/lib/fpc/VERSION나 /usr/lib/fpc/VERSION 중 먼저 발견되는 곳
    • 다른 운영체제: 컴파일러 실행파일이 위치한 디렉토리 및 그 상위 디렉토리

      디렉토리가 결정되면 찾을 경로에 아래의 경로가 추가됩니다.
      1. FPCDIR/units/TARGET
      2. FPCDIR/units/TARGET/rtl

    • 여기에서 TARGET은 여러분이 컴파일 하는 대상으로 대체됩니다.

-vu 옵션으로 찾을 경로를 확인해볼 수 있습니다.

LINUX 상에서, 컴파일러는 파일명을 모두 소문자로 내부 변환합니다. 파스칼은 대·소문자를 구분하지 않기 때문에 이 작업은 필요합니다. 즉, 예를 들자면 Uses Unit1;이나 uses unit1;은 같은 뜻입니다. 8자가 넘는 유닛명은 일단은 긴 유닛명 그대로 검색을 해보고, 없다면 8자로 잘라서 검색해볼 것입니다.
예를 들면, foo.pp라는 파일이 어떤 유닛을 필요로 한다고 가정하면 아래와 같이 입력합니다.

ppc386 -Fu.. -Fuunits foo.pp

그렇다면 컴파일러는 아래의 경로에서 유닛을 찾으려고 할 것입니다.

  1. 현재 디렉토리
  2. 컴파일러 실행파일이 있는 곳 (LINUX에서는 아님)
  3. 현재 디렉토리의 상위 디렉토리
  4. 현재 디렉토리의 하위 디렉토리
  5. 기본 유닛 디렉토리

만약 컴파일러가 필요한 유닛을 찾는다면 이 유닛의 소스 파일을 이 유닛이 있는 디렉토리에서 찾아볼 것입니다. 만약에 유닛의 소스 파일을 찾았다면 컴파일러는 두 파일의 file time을 비교해볼 것입니다. 소스 파일이 유닛 파일보다 최근에 변경되었다면 컴파일러는 유닛을 이 소스 파일로 재컴파일할 것입니다.

(건너뛰고)


4. 컴파일 관련 문제


4.1 일반적인 문제


  • IO-error -2 at ...
리눅스에서 옮김틀을 시작할 때 이 쪽글을 볼 수 있습니다. 이것은 옮김틀이 오류 정의 파일을 찾지 못했을 때 발생하는 전형적인 오류입니다. 사용자는 이 실수를 리눅스에서 -Fr 설정으로 해결할 수 있습니다. (#Fr)

  • Error : File not found xxx 또는 Error: couldn't compile unit xxx
이것은 유닛 경로가 정확히 설정되지 않았을 때 발생하는 전형적인 오류입니다. 옮김틀이 유닛을 현재의 디렉토리와 옮김틀이 있는 디렉토리에서만 찾는다는 것을 기억하시기 바랍니다. 다른곳에서도 찾게 하려면 -Fu 설정(#Fu)을 사용해 명백히 알리거나 설정 파일에서 설정해야 합니다.

4.2 DOS 상에서 발생할 가능성이 있는 문제


  • No space in environment.
이런 오류 쪽글은 SET_PP.BAT를 the AUTOEXEC.BAT에서 호출했을때 발생합니다. 이 문제를 해결하기 위해 사용자는 환경 기억영역(memory)를 확장해야 합니다. 이렇게 하기 위해 CONFIG.SYS에서

SHELL=C:\DOS\COMMAND.COM

를 찾아 다음과 같이 바꾸시기 바랍니다.
SHELL=C:\DOS\COMMAND.COM /E:1024

이미 인자가 설정되어 있다면 그 값을 늘려주기만 하면 됩니다.

  • Coprocessor missing
옮김틀이 coprocessor가 없다고 한다면 coprocessor emulation을 설치하시기 바랍니다.

  • Not enough DPMI memory
옮김틀을 DPMI와 함께 사용하려면 최소한 7-8 MB의 빈 DPMI 기억영역이 필요지만 16 MB가 더 현실적입니다.

5. 컴파일러 설정


옮김틀의 출력을 조절하는 방법은 여러가지가 있습니다. 본질적으로 별개의 두 가지 방법이 있습니다:

  • 명령줄 옵션 사용
  • 설정 파일 사용: ppc386.cfg.

먼저 옮김틀은 설정 파일을 읽습니다. 그 다음에 명령줄 옵션을 적용합니다. 따라서 기본적 옵션은 설정 파일에 설정하고, 일부 유닛과 프로그램을 컴파일할 때에는 특별한 옵션을 줄 수 있습니다. 먼저 명령줄 옵션들을 보여드리고, 설정 파일에서 특별한 명령줄 옵션을 주는 방법을 설명해드리게습니다. 이것을 읽으실 때 옵션은 대소문자를 구분해야 한다는 점을 유의하십시오. 주로 이것은 도스용이기보다는 리눅스용이기 때문입니다.

5.1 커맨드 라인 옵션 사용하기


옮김틀의 0.99.10 버전에서 사용가능한 옵션들을 종류별로 나열했습니다. (컴파일러에서 보여주는 옵션 순서, 즉 알파벳 순서로 보시려면 부록A를 참조하여 주십시오.):

5.1.1 일반적인 옵션들

-h
이 옵션을 사용하면, 옮김틀이 모든 옵션을 보여주고 바로 종료합니다.
-?
-h 옵션과 같지만, 화면이 가득 찰때마다 엔터키를 기다립니다.
-i
저작권 정보를 보여줍니다. 이 옵션은 -ixxx 형태로 줄 수 있는데 xxx는 다음 중 하나입니다.

D
: 옮김틀 날짜를 보여줍니다.
V
: 옮김틀 버전을 보여줍니다.
SO
: 옮김틀 OS를 보여줍니다.
SP
: 옮김틀 프로세서를 보여줍니다.
TO
: 대상 OS(target OS)를 보여줍니다.
TP
: 대상 프로세서(target processor)를 보여줍니다.
-l
표준 출력 장치에 Free Pascal 로고를 출력합니다. Free Pascal 버전도 보여줍니다.
-n
이 옵션이 있으면 기본 설정 파일을 읽지 않습니다. @ 옵션으로 설정 파일을 넘겨줄 수는 있습니다.

5.1.2 피드백을 얻기 위한 옵션들

-vxxx
상세 정보를 보여준다(verbose). xxx는 다음 것들을 조합한다.

  • e : 에러만 보여준다. 이 옵션은 디폴트이다.
  • i : 일반적인 정보를 일부 보여준다.
  • w : 경고 사항(warnings)을 보여준다.
  • n : 주의 사항(notes)을 보여준다.
  • h : 유의 사항(hints)을 보여준다.
  • l : 파일의 컴파일 작업이 진행되는 행번호를 보여준다. 100줄 단위로 보여준다.
  • u : 로드하는 유닛에 대한 정보를 보여준다.
  • t : 열고자 하는 파일의 이름을 보여준다.
  • p : 컴파일이 진행되는 procedure나 function들의 이름을 보여준다.
  • c : 조건부로 진행할 때 경고를 보여준다.
  • m : 어떤 매크로가 정의되었는지를 보여준다.
  • d : 다른 디버그 정보를 보여준다.
  • a : 가능한 모든 정보를 보여준다.(모든 옵션을 준 것과 같다.)
  • 0 : 아무 메시지를 출력하지 않는다. 설정 파일에서 설정한 것을 무효화시키는데 사용할 수 있다.
  • b : 오버로드된 function에서 오류가 발생했을 시 모든 procedure 선언을 보여준다.
  • x : 실행 파일 정보를 일부 보여준다. (Win32 플랫폼에서만 사용 가능)
  • r : Rhide/GCC 호환 모드: 오류를 다른 방식으로 출력하여 RHIDE에서도 인식될 수 있게 한다.

5.1.3 파일과 디렉토리에 관한 옵션들

-exxx
as(어셈블러), ld(링커)의 실행 파일이 있는 디렉토리를 정해줍니다.
-FD
-e와 같습니다.
-Fexxx
에러 등을 xxx 파일에 씁니다.
-FExxx
실행 파일과 유닛을 현재 디렉토리에 쓰지 않고 xxx 디렉토리에 씁니다.
-FIxxx
include을 xxx 경로에서도 찾습니다.
-Flxxx
라이브러리를 xxx 경로에서도 찾고 linker에도 이것을 넘겨줍니다.
-FLxxx
(LINUX 전용)xxx를 dynamic linker로 사용합니다. 디폴트 값으로 이것은 /lib/ld-linux.so.2와 /Hlib/ld-linux.so.1 중 먼저 찾는 것으로 합니다.
-Foxxx
목적(object) 파일을 xxx 경로에서도 찾습니다. 링크할 파일을 여기서 찾습니다.
-Frxxx
xxx에 옮김틀 메시지를 포함하고 있는 파일을 정해줍니다. 디폴트로 옮김틀에 built-in 메시지가 있습니다. 이 옵션은 디폴트 메시지를 대체합니다.
-Fuxxx
유닛을 xxx 경로에서도 찾습니다. 먼저 유닛은 현재 디렉토리에서 찾습니다. 거기서 유닛을 못찾은 경우에 유닛 경로에서 찾습니다. 항상 system 유닛의 경로는 포함해야 합니다.
-FUxxx
유닛을 현재 디렉토리에 쓰지 않고 xxx 디렉토리에 씁니다. 이 옵션은 -FE 옵션을 대체합니다.
-Ixxx
include 파일을 xxx 경로에서도 찾습니다. -Fi 옵션과 같은 효과를 냅니다.
-P
어셈블을 할 때 파일 대신에 파이프를 씁니다. 이렇게 하면 OS/2와 LINUX에서 속도가 더 빨라질 수 있습니다. 파이핑을 지원하는 어셈블러(예를 들어 GNU as)에서만 사용가능합니다.

5.1.4 출력 결과의 종류를 제어하는 옵션들

-a
(내부 어셈블러를 사용하지 않는 경우에) 생성되는 어셈블러 파일을 지우지 않게 합니다. 이것은 (가능한) 생성된 배치 스크립트로 간주한다.
-al
어셈블러 파일에 소스코드 행 번호를 주석으로 포함한다.
-ar
레지스터 할당/해제 정보를 어셈블러 파일에 나열합니다. 옮김틀이 생성한 코드를 디버깅하는 것이 일차 목적입니다.
-at
임시 할당/해제 정보를 어셈블러 파일에 나열합니다.
-Axxx
어떤 종류의 어셈블러가 생성되어야 하는지를 정합니다. xxx는 다음과 같습니다. '''as
GNUas를 이용하여 어셈블합니다.
asaout
GNUas for aout(Go32vl)을 이용하여 어셈블합니다.
nasmcoff
Nasm을 사용한 coff(Go32v2) 파일.
nasmelf
Nasm을 사용한 elf32(Linux) 파일.
nasmobj
Nasm을 이용한 object 파일.
masm
Masm(Microsoft)를 이용한 object 파일.
tasm
Tasm(Borland)를 이용한 object 파일.
coff
내부 이진 목적코드 쓰기를 사용한 coff object 파일(Go32v2).
pecoff
내부 이진 목적코드 쓰기를 이용한 pecoff object 파일(Win32).
-B
지난번 컴파일 이후로 변경되지 않은 유닛들까지 모든 사용된 유닛을 다시 컴파일합니다.
-b
브라우저 정보를 생성합니다. 이 정보는 통합 개발 환경(IDE)에서 유닛 내에 클래스, 객체, 프로시저, 형, 변수 정보를 제공하기 위해 사용합니다.
-bl
-b와 같지만 지역 변수, 타입, 프로시저에 대해서도 정보를 생성합니다.
-CD
동적 라이브러리를 만듭니다. 리눅스에서 동적으로 연결 가능한 라이브러리로 변형하려면 사용합니다.
-Chxxx
힙에서 xxx 바이트만큼을 예약합니다. xxx는 1024와 67107840의 사이 여야 합니다.
-Ci
입출력 검사 코드를 생성합니다. 프로그램의 일부 입출력 코드가 오료 상태를 돌려주는 경우에, 프로그램이 실행 시간 오류를 내고 종료합니다. I/O 오류에 따라서 오류가 생성됩니다.
-Cn
연결 스테이지를 생략합니다.
-Co
정수 오버플로 검사 코드를 생성합니다. 정수 에러의 경우 프로그램에 의해 실행 시간 오류가 생성될 것입니다.
-Cr
범위 검사 코드를 생성합니다. 프로그램이 잘못된 배열 첨자의 원소에 접근하려고 하거나 범위 밖으로 열거형을 증가시키는 경우에 실행 시간 오류가 생성될 것입니다.
-Csxxx
스택 크기를 xxx로 정합니다.
-Ct
스택 검사 코드를 생성합니다. 잘못된 스택 연산을 수행할 경우에 실행 시간 오류가 생성될 것입니다.
-CX
유닛을 쓸(writing) 때, 스마트 링크된 유닛을 생성합니다. 스마트 링크는 프로그램에서 실제로 필요한 코드 부분만을 연결합니다. 사용되지 않은 모든 코드는 남겨지게 됩니다. 이진 코드가 더 작아지게 됩니다.
-dxxx
xxx 이름의 심볼을 정의합니다. 조건부 컴파일 부분에서 사용할 수 있습니다.
-E
-Cn과 같습니다.
-g
gdb로 디버깅할 때 필요한 디버깅 정보를 생성합니다.
-gg
-g와 같습니다.
-gd
dbx에서 필요한 디버깅 정보를 생성합니다.
-gh
heaptrc 유닛을 사용합니다.(유닛 참고문서를 보십시오)
-gc
포인터 검사를 생성합니다.
-Oxxx
컴파일러의 코드 생성을 최적화합니다. xxx는 다음의 값들 중 하나가 될 수 있습니다. g
크기를 최적화합니다. 더 작은 코드 생성을 시도합니다.
G
시간에 최적화합니다. 더 빠른 코드 생성을 시도합니다 (기본 값입니다).
r
특정 변수를 레지스터에 유지합니다 (실험적인 옵션이기 때문에 주의하여 사용하십시오).
u
불확실한 최적화를 합니다.
1
1레벨의 최적화를 합니다(빠른 최적화).
2
2레벨의 최적화를 합니다(-O1보다 조금 느린 최적화).
3
3레벨의 최적화를 합니다(-O2에다가 -Ou).
Pn
(인텔 전용) 프로세서를 정합니다. n은 1
386/486에 최적화
2
Pentium/PentiumMMX (tm)에 최적화
3
PentiumPro/PII/Cyrix 6x86/K6 (tm)에 최적화
중에 하나입니다.
이들의 정확한 효과는 프로그래머 가이드에서 찾으십시오.
-oxxx
옮김틀이 xxx를 출력 파일(실행 파일)의 이름으로 사용합니다. 프로그램을 컴파일 할 때만 사용합니다.
-pg
gprof에 필요한 profiler 코드를 생성합니다.
-s
옮김틀이 어셈블러와 링커를 호출하지 않게 합니다. 대신에 컴파일러는 도스에서는 PPAS.BAT, 리눅스에서는 ppas.sh라는 스크립트를 생성하는데 이것들을 실행하면 실행 파일을 생성할 수 있습니다. 컴파일 과정을 더 빠르게 하고 컴파일러의 출력을 디버그하기 위해서 사용할 수 있습니다.
-Txxx
목표 운영 체제를 선택합니다. xxx는 다음중 하나가 될 수 있습니다.
  • GO32V1 : DOSand version 1 of the DJ DELORIE extender (no longer maintained).
  • GO32V2 : DOSand version 2 of the DJ DELORIE extender.
  • LINUX : LINUX.
  • OS2 : OS/2 (2.x) using the EMX extender.
  • WIN32 : WINDOWS32 bit.
-uxxx
심볼 xxx를 정의 해제합니다. -d 옵션과 반대 옵션입니다.
-Xx
실행 파일 옵션입니다. 옮김틀이 어떤 종류의 실행 파일이 생성되어야 하는지 알려줍니다. x는 다음 중 하나가 될 수 있습니다.
  • c : (리눅스 전용) C 라이브러리에 연결합니다. 프리 파스칼을 다른 운영 체제로 포팅하기 시작했을 때만 사용해야 합니다.
  • D : 동적 라이브러리에 연결합니다 (FPC_LINK_DYNAMIC 심볼을 정의합니다).
  • s : 실행 파일에서 심볼을 제거합니다.
  • S : 정적 유닛에 연결합니다 (FPC_LINK_STATIC 심볼을 정의합니다).
  • X : 스마트 링크 된 유닛에 연결합니다 (FPC_LINK_SMART 심볼을 정의합니다).


  • 최초작성 2005.1.5 : 문서 분량이 방대해서 부분부분 나눠서 순서대로 번역하겠습니다. -- 슈로페
  • Index부분과 실제 문단 제목이 실수로 인해서 다르게 번역될 수 있으니 발견하시면 수정해주세요 -- 슈로페

  • 수정 : 2005.1.8. 0시 16분.
  • 바뀐점 : 2.1 절을 번역해서 뒤에 그냥 붙여넣었습니다. ^^;;; 혹시 귀찮은 방해였다면 죄송합니다. -- SwingFixer

  • 바뀐점 : 2005년 1월 8일 12시 15분 2.2 작성 완료. -- 퇴프

  • 아닙니다;; 최초로 제 번역작업을 도와주신 분이군요^^ 감사합니다. 앞으로도 많이 도와주시길.. -- 슈로페

  • 수정시작 : 2005. 1. 8. 21시 29분.
  • 바꾸고 있는 점 : 퇴프님의 번역 부분을 기존 양식에 맞춰서 바꾸고 있습니다. -- SwingFixer
  • 수정 일시정지 : 2005.1.8. 오후 10시 6분.
  • 추신. 퇴프님 홈페이지에... 들어가지지 않는군요 ^^;

  • 바뀐점 : 2005. 1. 8. 22시 10분. 아주 짧은 4장 끝냈습니다.

  • 또 양식을 안지켰습니다. 죄송합니다 ㅠㅠ. 다음부터는 꼭 문체 통일하겠습니다. 슈로페가 알아서 해줄거라 믿고 있어서... (긁적) 그런데 사전에 등록된 순우리말 용어까지 고치셨네요. 누리집은 첫페이지 include를 뭔가 잘못 써서 그렇습니다. 13시 쯤 망가졌어요;; 참.. 슈로페님 시간 전부 24시간으로 고쳤습니다. -- 퇴프
  • include문을 다 지우고 새로 쓰는 노동 끝에 웹사이트 살려냈습니다 -_-;; 링크 두개가 잘못연결ㅤ됐지만 그래도 잘뜨네요. -- 퇴프

  • 수정시각 : 2005. 1. 9. 0시 56분. 퇴프님께서 번역해주신 4장을, 일단 양식만 맞춰 봤습니다.
  • 섣불리 용어를 잘못 골랐다가는 오히려 저로 인해서 전체 진행이 크게 느려질 듯 싶은 두려움이... ^^;;; -- SwingFixer
  • (불필요한 논쟁을 일으킬듯한 글 지워버렸습니다. 보관은 하고 있습니다.) -- 퇴프


  • 한 가지 재미있는 질문을 드려도 될지요? 제 자신이 너무 전산학만 파서 그런지는 모르겠습니다만 옮김틀, 과 같은 용어들은 어떤 사전에 수록되어 있는지 도저히 찾을 길이 없습니다. (혹은 아예 전산학을 안 파서 그런 건가... ^^;) 온라인이나 혹은 오프라인 (서적) 에서 그러한 자료들을 접하기 위해서는 어떻게 해야 좋을런지요? -- SwingFixer

  • (불필요한 논쟁을 일으킬듯한 글 지워버렸습니다. 보관은 하고 있습니다.)-- 퇴프

  • 오랫동안 삽질한다고 번역 작업을 안했는데ㅡㅡ 음... 근데 퇴프는 언제나 글의 순서를 뒤죽박죽으로 만들어 놓네요;; 중간 중간에 작업 상황을 알리는 글이 영 엉뚱한 곳으로 가 있고ㅡㅡ. 개인적으로 이 문서에 있는 외래어(외국어?)들을 토박이말로 바꾸는데에 대해서 그다지 동의는 하지 않습니다만.. 이유인 즉슨 이미 여기 나오는 용어의 상당수는 이쪽 관련 분야에서는 토착화되었기 때문이죠. 외국어가 아니라 와래어가 되었다.. 이 말씀. 물론 토박이말로 바꾸면 좋겠지만 순화어라고 만들어 놓은게 엉터리 한자말이 대부분이고 또 아마 이 글을 접하는 대부분의 사람들은 순화어에 의해서 더 이질감을 만들 것이라고 생각합니다. --슈로페

  • 이곳의 번역작업은 완전히 멈춘것입니까?

  • 5장부터 번역중입니다. 번역하다가 브라우저를 실수로 닫아버려서 의욕이 많이 저하되는군요. 다시 조금씩 하고 있는 중입니다. --only2sea


한국어로 번역할때의 원칙

  • 주어가 1, 2인칭일때는 되도록 생략하며 2인칭이 독자를 가리키는 말일때는 3인칭으로 바꾼다.
  • 피동, 사동을 능동으로 최대한 바꾼다.
  • 절보다는 구로, 구보다는 한 단어로 표현한다.
  • 전치사를 직역하지 않는다.
  • 옮길말이 없는 경우 미어 발음에 치중하지 않는다.
  • 공적인 문서는 '하다'와 '합니다'로만 번역한다.
  • 역순수식을 하지 않는다.


ID
Password
Join
Executive ability is prominent in your make-up.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2007-02-16 02:10:18
Processing time 0.0253 sec