前回は、Turbo Pascalを現代によみがえらせるFreePascalコンパイラで外部ライブラリを呼びだして使うところを練習してみました。その際、不完全なインストールが発覚。修正対応したので、各種の外部ライブラリ(かなり大量)が使えるようになったハズ。今回は、自前のライブラリ作成方法を確認しておきたいと思います。
※実機動作確認には以下を使用しております。
-
- Windows 11 PC (i5-1235U)
- Ubuntu 24.04 LTS on WSL2
- QEMU 8.2.2
- FreeDOS 1.3
- Free Pascal Compiler 3.2.2
Turbo Pascal式の分割コンパイル
原初の純粋なPascalは教育用であったせいか、分割コンパイルなど対応していなかった記憶。しかし、実用のコンパイラとしては分割コンパイルなしにはやり切れないので、当然 Free Pascal も分割コンパイルのサポートがあり。Turbo Pascalに「可能な限り寄せている」処理系なので、当然 Turbo Pascal 式です。まあ、事実上の業界標準(誰が言った?)Turbo Pascal式なら安心?
さてライブラリの実体ファイルは2つです
-
- ライブラリ名.O
- ライブラリ名.PPU
.Oの方が実体コードを収めたオブジェクトファイルで、PPUの方がライブラリの各種情報を収めたファイルのようです。Cであれば、.H なるヘッダファイルにライブラリ内のプロトタイプなど定義されとりますが、内容テキストファイルで、人間が記述するのが普通です。 しかし、PPUの方はバイナリファイルで、ライブラリソースをコンパイルしたときにコンパイラが吐き出してくれるものです。ダンプするとこんな感じ。
ライブラリの中身を確認しようとするとヘッダではなく、ソースそのものを見ることになるかもです。ちょっとCとは違うね。でもま、その辺をカッコよくするツールも控えておるみたい。
ライブラリ(unit)記述ファイル
ライブラリ(unit)の記述はざっくり書くと以下のようなスタイルです。
-
- unit ユニット名
- interface
- 外部から参照できる関数、手続き等を列挙
- implementation
- 関数、手続き等の実体
今回、サンプルとして作成したMyunit0.pas が以下に。「つまらない計算」をする関数1個だけ定義しとります。
上記をコンパイルしたところが以下に。ソースファイルのヘッダそのものが通常のプログラムと異なる unit から始まっているので分割コンパイルの片割れであることは一目瞭然。何もオプションスイッチなどつけず、フツーにコンパイルしているだけですが、この時点ではリンカは呼び出されず、.oと.ppuが自動生成されます。
自前ライブラリを呼びだして使ってみる
自前のライブラリ(unit)の、.o と .ppu は、その在処をfpc.cfgファイル内にライブラリパスとして記述しておいてもよいみたいです。しかし、本体プログラムソースと同じディレクトリに配置しておけば、何も指定せずとも見つけてくれるみたい、お楽。
既に前回、外部ライブラリを参照ということで uses してますが、自前の場合も書式は一緒。こんな感じ。
ちゃんと分割コンパイルのされた関数が呼び出されて実行されているみたいです。よかった。Turbo Pascalどおりよな。