第2章 MQLIBを利用したプログラミング

 本節では、MQLIBを利用したプログラミングのための基本的な事項について説明する。

2.1 C言語

2.1.1 ヘッダファイル

 MQLIBで使用される関数や構造体、マクロ定義などの情報は、全てヘッダファイル内に収められている。従ってこれらをプログラムの先頭でインクルードしなければ、MQLIBを利用したプログラムを作成することができない。
 MQLIBでは、以下に述べる3つのインクルードファイルが用意されている。

mqdb.h

 MQLIBで使用される構造体変数、列挙型変数、マクロの定義や、関数の宣言を行なうヘッダファイルである。

mqerror.h

 MQLIBにおけるエラー番号、エラーメッセージを定義したファイルである。

mqfunc.h

 MQLIBにおける関数番号を定義したファイルである。

mqstrs.h

 MQLIBで使用する文字定数を定義したファイルである。
 但し、mqdb.h内で他のファイルをインクルードするため、ユーザプログラムではmqdb.hだけをインクルードすればよい。なお、上記 4 ファイルは、複数回インクルードされてもプログラムのコンパイルに影響はない。
 これらのヘッダファイルは、
第A2章で述べるインストールの手順をとった場合には、/usr/local/include/mqdbディレクトリにインストールされる。しかし、通常コンパイラはこのディレクトリをサーチしないので、次のいずれかの方法をとる必要がある。
  1. ヘッダファイルのシンボリックリンクを、/usr/includeディレクトリに作成する。但しこの作業は、通常システム管理者のみが実行できる。
  2. コンパイル時に、-Iオプションを利用して、ヘッダファイルが存在するディレクトリを明示する。通常はこの方法を利用することを薦める。実行例については後述する。

2.1.2 ライブラリ・ファイル

 MQLIB用関数は、通常libmq.aという名前のライブラリ・ファイルに収められている。このファイルは、第A2章で述べるインストールの手順をとった場合には、/usr/local/libディレクトリにインストールされる。また、XDRライブラリが実装されていないようなシステムや、ソースパッケージに添付されているXDRライブラリを使用するようなインストールを行った場合には、libxdr.aというライブラリが同じディレクトリにインストールされる。
 ユーザプログラムを作成する際には、リンク時にこれらのライブラリ・ファイルもリンクするようにコンパイラ/リンカに指示する必要がある。このためには、コンパイルまたはリンク時に、-lmqオプションを付加する。また、上で述べたXDRライブラリを使用する場合には、さらに-lxdrオプションを追加しなくてはならない。システムによっては、システムで用意されている XDR 関連のサポートルーチンが標準のC言語用ライブラリにない場合がある(注)。このようなシステムでは、さらに-lnslオプションを付加し、XDR関係のサポートルーチンをリンクさせる必要がある。
 また、/usr/local/lib以外のディレクトリにファイルをインストールした場合や、リンク時に/usr/local/libをサーチしないコンパイラ/リンカを使用している場合には、libmq.aが収められているディレクトリを指示するために、-Lオプションを使用する。

(注)System V系のUNIXシステムなど。

2.1.3 コンパイル方法

 上2節で述べた方法を踏まえて、MQLIBを利用したファイルのコンパイルの方法を説明する。まず、第A2章で述べる標準的なインストールの手順をとった場合における、ユーザプログラム(以下ではprog.cというファイル名になっている)のコンパイル例である。
\begin{exec} {\tt cc -o prog prog.c -I/usr/local/include/mqdb -lmq} \end{exec}  次の例は、ライブラリを/usr/local/lib/mqdbというディレクトリにインストールした場合のコンパイル例である。
\begin{exec} {\tt cc -o prog prog.c -I/usr/local/include/mqdb -L/usr/local/lib/mqdb -lmq} \end{exec}

2.2 FORTRAN

 本章では、ユーザが作成したFORTRAN言語のプログラムから、MQLIBを利用してMQDBデータファイルへアクセスする際の、基本的な的な注意点について述べる。FORTRAN用サブルーチンについて詳細は第4章に述べられている。

2.2.1 コンパイル方法

 ここでは、FORTRANで書かれたプログラムをコンパイルするために必要な事項について説明する。

2.2.2 インクルード・ファイル

 FORTRANプログラムをコンパイルする場合には、C言語インタフェースを利用する場合のように、特別なファイルをインクルードする必要はない。

2.2.3 ライブラリ・ファイル}

 FORTRAN用サブルーチンは、ライブラリ・ファイルの形で提供されている。これらは、libmqf77.aという名前のファイルに収められている。従って、このライブラリをリンクすることによって、FORTRAN用サブルーチンを利用したプログラムのコンパイルが可能になる。しかし、FORTRANサブルーチンは、その内部でC言語用の中位/下位インタフェース関数を利用しているため、それらが格納されているlibmq.aもリンクしなければならない。このため、コンパイル/リンク時には、-lmqf77 -lmqオプションを付加する必要がある。
 なお、これらのファイルは、第 \ref{install} 章で述べるインストールの手順をとった場合には、/usr/local/libディレクトリにインストールされる。
 また、/usr/local/lib以外のディレクトリにファイルをインストールした場合や、リンク時に/usr/local/libをサーチしないコンパイラ/リンカを使用している場合には、libmq.aが収められているディレクトリを指示するために、-Lオプションを使用する。
 XDR関連のライブラリについての注意は、\ref{prog-c-lib}節に述べられている。

2.2.4 コンパイル方法

 上2節で述べた方法を踏まえて、MQLIBを利用したファイルのコンパイルの方法を説明する。まず、第 \ref{install} 章で述べる標準的なインストールの手順をとった場合における、ユーザプログラム(以下ではprog.fというファイル名になっている)のコンパイル例である。なお、FORTRANコンパイル用のプログラム名は処理系によって異なる場合があるので注意すること。ここではf77となっている。
\begin{exec} f77 -o prog prog.f -lmq -lmqf77 \end{exec}  次の例は、ライブラリを/usr/local/lib/mqdbというディレクトリにインストールした場合のコンパイル例である。
\begin{exec} f77 -o prog prog.f -L/usr/local/lib/mqdb -lmq -lmqf77 \end{exec}

2.3 プログラミングにおける注意点

 本節では、プログラミングにおける主要な注意点について説明する。

2.3.1 サブルーチン名

 FORTRAN用サブルーチンについては、関数名はすべて 6 文字以内となっており、最初 2文字は必ず MQ となっている。3 文字目は、
\begin{tabular}{cc} C & {出力用サブルーチン} \\ R & {読み込み用サブルーチン} \\ U & {ユーティリティ用サブルーチン} \end{tabular}  混乱を避けるため、FORTRANプログラム内では、なるべくMQで始まるサブルーチン名の利用を避けることが望ましい。

2.3.2 利用するインタフェース関数

 MQLIB関数をプログラムで利用する場合には、必ず上位インタフェース関数を利用するようにする。中位、下位インタフェース関数は、プログラム内で利用するためではなく、上位ライブラリ関数から呼び出されるために定義されていると考えるべきである。ユーティリティ関数は必要に応じて、プログラム内で利用するとよい。

2.3.3 関数名・変数名

 MQLIBでは、関数及び変数名称は全て Mq... という形で統一されている。従って、Mq... で始まる関数名をユーザ定義の関数につけることは、紛らわしいので極力避けることが望ましい。

2.3.4 マクロ名

 マクロ定義においては、EMQ... で始まるマクロ、及びMQで始まるマクロ名は予約されている。詳しいマクロ名定義については、第 \ref{defs-macro} 節に述べられている。

2.3.5 エラーが発生するとき

 コンパイルの際にエラーが多発したり、コンパイルは成功したがプログラムがコアダンプするなど、正常に動作しない場合には、次の事項を確認してみるとよい。
  1. ライブラリやインクルード・ファイルが存在するディレクトリの指定が誤っていないかどうか確認する。
  2. 関数名、変数名、マクロ名に、上節で述べたような、MQあるいはMqで始まるような名称を使用していないかどうか調べる。
  3. 関数引数の対応関係は正しいか。コアダンプを引き起こすエラーの多くは、引数の対応関係の誤りが原因となっている。特にポインタを渡すべきところで実際の数を渡したり、その逆を行なっていないかどうかチェックする。
  4. 処理系はANSI Cに対応しているか。特に、コンパイラはANSI C対応でも、ライブラリやヘッダファイルが対応していない場合にはエラーが多発する。
  5. ライブラリは正しいものを使用しているか。常に仕様と合致したバージョンのライブラリを使用し、もしバージョンが古くなっていたらインストールをし直す。
▲このページの先頭へ


前の章へ

目次へ

次の章へ
月震ホームページへ
terakinizers!!トップへ