next up previous contents
Next: 異機種間でのデータの交換 Up: CとFORTRANの混在 Previous: FORTRANコモンブロックをCから使う

CとFORTRANの混在したプログラムのリンク

ここまででCとFORTRANの混在したプログラムの書き方を見てきました。次に 必要なことはそれらをコンパイルしてリンクすることです。コンパイルはもち ろんそれぞれの言語コンパイラで行ないますが、-cを付けてオブジェクトモジュー ルを作ることは言うまでもありません。これで複数の.oファイルができました。 つぎにこれらをリンクして実行可能イメージを作るわけですがここで注意が必 要です。

Cのプログラムをリンクする場合UNIXのシステムコールとCのランタイムライ ブラリが参照されることは以前に説明しました。さらにFORTRANプログラムを リンクする場合そのプログラムがFORTRAN組み込み関数を参照している場合そ のライブラリも教えてやる必要があります。Cのランタイムライブラリは /usr/lib/libc.aなどと言う名前で用意されています。FORTRAN組み込み関数は 同様にlibF77.aなどという名前になっているはずです。これらのライブラリは ccコマンドやf77コマンドが自動的に取ってきてくれます。ですから、リンク をする場合もldではなくてccやf77を使います。

もう一つ注意する点はプログラムのエントリーポイントのことです。エント リーポイントはC言語の場合man()関数として宣言します。FORTRANの場合 program文でエントリーポイントであることを宣言します。このとき、ユーザ が気にしていないところでいくつかの関数や変数が自動的に付加されます。こ れらの面倒をリンクの時にも見てやらなければなりません。ですから、 FORTRANのエントリーポイントを持ったプログラムを作る場合ccではなくてf77 コマンドでリンクをします。

見てきたようにFORTRANとCそれぞれが非常に重要な役割をはたしていること がわかります。当面はそれぞれの長所を生かした形で混成使用することはやむ を得ないでしょう。それぞれの言語の特徴を次にまとめてみますが、どちらも 絶対的に優位という訳ではありません。それぞれの括弧の中は反対陣営からの 反論です。(別にそういう紛争があるわけではないけど)

    Cが有利であると思われること



        シェルからの引数がmainで渡せる。コマンド組み込みが自然にできる。        

                (FORTRANでも引数を参照する関数は用意されている)

        システムコールはCから呼ぶように設計されている。

                (FORTRANから呼ぶインターフェースもある)

        構造体やポインターが扱える。

                (FORTRANでも仕様拡張によりできることが多い)



  FORTRANが有利であると思われること



        CERNLIBはFORTRANからの呼出しを前提に書かれている。

                (Cからだって呼べないことはない)

        一般ユーザはFORTRANの方が使い慣れている。

                (ユーザ定義関数だけFORTRANで書かせることもできる)



next up previous contents
Next: 異機種間でのデータの交換 Up: CとFORTRANの混在 Previous: FORTRANコモンブロックをCから使う



Kinya Hibino
Sun Jan 14 21:50:32 JST 1996