ページの先頭行へ戻る
Symfoware Server V10.0.0/V10.0.1 アプリケーション開発ガイド(埋込みSQL編)

6.1.4 複数のコンパイル単位から構成されるアプリケーションのコンパイル・リンクの方法

前項では、SQL文を使用するアプリケーションが1つのコンパイル単位である場合の、コンパイル・リンクの方法について説明しました。一方、大規模なアプリケーションの開発においては、複数のコンパイル単位から構成されるアプリケーションを作成し、これらをコンパイル・リンクするような開発方法が必要となります。本項では、このようなアプリケーションがSQL文を使用する場合の、コンパイル・リンクの方法について説明します。

複数のコンパイル単位から構成されるアプリケーションでは、ロードモジュールはアプリケーションの開発や保守の形態、および実行環境を考慮して、それぞれのコンパイル単位を静的リンクするか、または動的リンクするかを選択します。

6.1.4.1 静的リンクする場合のコンパイル・リンク

複数のコンパイル単位を静的リンクする場合のコンパイル・リンクの方法を以下に示します。

図6.3 複数のコンパイル単位を静的リンクする場合のコンパイル・リンクの方法

SQL文を使用するコンパイル単位は、sqlcc、sqlfccまたはsqlcobolを使用してコンパイル・リンクを行います。

参照

sqlcc、sqlfccおよびsqlcobolのオプションの指定方法については、“コマンドリファレンス”を参照してください。

アプリケーションによっては、SQL文を使用しないコンパイル単位が存在する場合があります。SQL文を使用しないコンパイル単位は、ccコマンド、gccコマンド、fccコマンドまたはcobolコマンドを使用してコンパイル・リンクを行います。

また、ロードモジュールを静的リンクして作成するには、副プログラムのオブジェクトファイルを作成し、主プログラムに静的にリンクする必要があります。

アプリケーションを静的リンクする場合に必要なオプションを以下に示します。

表6.5 アプリケーションを静的リンクする場合に必要なオプション

コンパイル対象の性質

指定するオプション

備考

SQL文を含むコンパイル単位

主プログラム

副プログラムのオブジェクトファイル名

リンクする副プログラム

-M

COBOLの場合に指定

副プログラム

-c

オブジェクトファイルの作成

SQL文を含まないコンパイル単位

主プログラム

副プログラムのオブジェクトファイル名

リンクする副プログラム

-M

COBOLの場合に指定

-L/opt/FSUNrdb2b/lib

RDBライブラリパス指定
(Solaris)

-L/opt/FJSVrdb2b/lib

RDBライブラリパス指定
(Linux)

-lsqldrvm

RDBライブラリ名(32ビットでかつ、マルチスレッドで動作するアプリケーションを静的リンクする場合に使用)

-lsqldrv

RDBライブラリ名(32ビットで実行するアプリケーションを静的リンクする場合に使用)

-lsql64drvm

RDBライブラリ名(64ビットでかつ、マルチスレッドで実行するアプリケーションを静的リンクする場合に使用)

-lsql64drv

RDBライブラリ名(64ビットで実行するアプリケーションを静的リンクする場合に使用)

副プログラム

-c

オブジェクトファイルの作成

C言語使用時の例

以下の例において、sqlfccを利用する場合は、sqlccをsqlfccに、またccをfccに置き換えたものになります。

1

SQL文を使用する主プログラム(demo04main.sc)と、SQL文を使用する2個の副プログラム(demo04sub1.sc、demo04sub2.sc)を静的リンクします。ロードモジュール名は“demo04”とします。

cd /home/rdb2/application/src 
sqlcc demo04sub1.sc -c
sqlcc demo04sub2.sc -c
sqlcc demo04main.sc -o ../bin/demo04 demo04sub1.o demo04sub2.o

2

SQL文を使用しない主プログラム(demo05main.c)と、SQL文を使用する副プログラム(demo05sub1.sc)、およびSQL文を使用しない副プログラム(demo05sub2.c)を静的リンクします。ロードモジュール名は“demo05”とします。

なお、Linuxの場合は、Lオプションに指定するパス名を読み替えてください。

cd /home/rdb2/application/src
sqlcc demo05sub1.sc -c
cc -c demo05sub2.c cc -o ../bin/demo05 -L/opt/FSUNrdb2b/lib -lsqldrv demo05main.c demo05sub1.o demo05sub2.o
Solaris3

64ビットで実行するアプリケーションを静的リンクする場合の例を示します。SQL文を使用しない主プログラム(demo08main.c)と、SQL文を使用する副プログラム(demo08sub1.sc)、およびSQL文を使用しない副プログラム(demo08sub2.c)を静的リンクします。ロードモジュール名は“demo08”とします。

cd /home/rdb2/application/src
sqlcc -v9 demo08sub1.sc -c
cc -xarch=v9 -c demo08sub2.c cc -xarch=v9 -o ../bin/demo08 -L/opt/FSUNrdb2b/lib -lsql64drv demo08main.c demo08sub1.o demo08sub2.o
Linux例4

64ビットで実行するアプリケーションを静的リンクする場合の例を示します。SQL文を使用しない主プログラム(demo09main.c)と、SQL文を使用する副プログラム(demo09sub1.sc)、およびSQL文を使用しない副プログラム(demo09sub2.c)を静的リンクします。ロードモジュール名は“demo09”とします。

cd /home/rdb2/application/src
sqlcc -v9 demo09sub1.sc -c
cc -c demo09sub2.c cc -o ../bin/demo09 -L/opt/FJSVrdb2b/lib -lsql64drv demo09main.c demo09sub1.o demo09sub2.o

COBOL使用時の例

1

SQL文を使用する主プログラム(demo06main.scob)と、SQL文を使用する2個の副プログラム(demo06sub1.scob、demo06sub2.scob)を静的リンクします。ロードモジュール名は“demo06”とします。

cd /home/rdb2/application/src
sqlcobol demo06sub1.scob -c
sqlcobol demo06sub2.scob -c
sqlcobol demo06main.scob -M -o ../bin/demo06 demo06sub1.o demo06sub2.o

2

SQL文を使用しない主プログラム(demo07main.cobol)と、SQL文を使用する副プログラム(demo07sub1.scob)、およびSQL文を使用しない副プログラム(demo07sub2.cobol)を静的リンクします。ロードモジュール名は“demo07”とします。

cd /home/rdb2/application/src
sqlcobol demo07sub1.scob -c
cobol -c demo07sub2.cobol cobol -M -o ../bin/demo07 -L/opt/FSUNrdb2b/lib -lsqldrv demo07main.cobol demo07sub1.o demo07sub2.o
Linux例3

64ビットで実行するアプリケーションを静的リンクする場合の例を示します。SQL文を使用しない主プログラム(demo08main.cobol)と、SQL文を使用する副プログラム(demo08sub1.scob)、およびSQL文を使用しない副プログラム(demo08sub2.cobol)を静的リンクします。ロードモジュール名は“demo08”とします。

cd /home/rdb2/application/src
sqlcobol -v9 demo08sub1.scob -c
cobol -c demo08sub2.cobol cobol -M -o ../bin/demo08 -L/opt/FJSVrdb2b/lib -lsql64drv demo08main.cobol demo08sub1.o demo08sub2.o

6.1.4.2 動的リンクする場合のコンパイル・リンク

複数のコンパイル単位を動的リンクする場合のコンパイル・リンクの方法を以下に示します。

図6.4 複数のコンパイル単位を動的リンクする場合のコンパイル・リンクの方法

SQL文を使用するコンパイル単位は、sqlcc、sqlfccまたはsqlcobolを使用してコンパイル・リンクを行います。

参照

sqlcc、sqlfccおよびsqlcobolのオプションの指定方法については、“コマンドリファレンス”を参照してください。

アプリケーションによっては、SQL文を使用しないコンパイル単位が存在する場合があります。

SQL文を使用しないコンパイル単位は、ccコマンド、gccコマンド、fccコマンドまたはcobolコマンドを使用してコンパイル・リンクを行います。

また、ロードモジュールを動的リンクして作成するためには、副プログラムは共用ライブラリにロードモジュールとして作成し、主プログラムのコンパイル・リンク時にリンクする副プログラムのロードモジュール名を指定する必要があります。

アプリケーションを動的リンクする場合に必要なオプションを以下に示します。

表6.6 アプリケーションを動的リンクする場合に必要なオプション

コンパイル対象の性質

指定するオプション

備考

SQL文を含むコンパイル単位

主プログラム

-l 副プログラムのロードモジュール名

リンクする副プログラム

-M

COBOLの場合に指定

副プログラム

-KPIC

C言語で共有ライブラリを作成する場合に指定
(Solaris)

-G

動的リンクの指定
(Solaris)

-fPIC

C言語で共有ライブラリを作成する場合に指定
(Linux)

-shared

動的リンクの指定
(Linux)

SQL文を含まないコンパイル単位

主プログラム

-l 副プログラムのロードモジュール名

リンクする副プログラム

-M

COBOLの場合に指定

副プログラム

-KPIC

C言語で共有ライブラリを作成する場合に指定
(Solaris)

-G

動的リンクの指定
(Solaris)

-fPIC

C言語で共有ライブラリを作成する場合に指定
(Linux)

-shared

動的リンクの指定
(Linux)

C言語使用時の例

以下の例において、sqlfccを利用する場合は、sqlccをsqlfccに、またccをfccに置き換えたものになります。

1

SQL文を使用する主プログラム(demo10main.sc)と、SQL文を使用する2個の副プログラム(libsub1.sc、libsub2.sc)を動的リンクします。ロードモジュール名は、副プログラムを“libsub1.so”および“libsub2.so”、主プログラムを“demo10main”とします。

なお、Linuxの場合は、KPICオプションとGオプションの代わりにfPICオプションとsharedオプションを指定します。

cd /home/rdb2/application/src
setenv LD_LIBRARY_PATH /home/rdb2/application/lib:$LD_LIBRARY_PATH
sqlcc libsub1.sc  -KPIC -G -o ../lib/libsub1.so
sqlcc libsub2.sc -KPIC -G -o ../lib/libsub2.so
sqlcc demo10main.sc -o ../bin/demo10main -lsub1 -lsub2

2

SQL文を使用しない主プログラム(demo11main.c)と、SQL文を使用する副プログラム(libsub3.sc)、およびSQL文を使用しない副プログラム(libsub4.c)を動的リンクします。ロードモジュール名は、副プログラムを“libsub3.so”および“libsub4.so”、主プログラムを“demo11main”とします。

なお、Linuxの場合は、KPICオプションとGオプションの代わりにfPICオプションとsharedオプションを指定します。

cd /home/rdb2/application/src
setenv LD_LIBRARY_PATH /home/rdb2/application/lib:$LD_LIBRARY_PATH
sqlcc libsub3.sc -KPIC -G -o ../lib/libsub3.so
cc -KPIC -G -o ../lib/libsub4.so libsub4.c cc -o ../bin/demo11main demo11main.c -lsub3 -lsub4

例3

64ビットで実行するアプリケーションを動的リンクする場合の例を示します。SQL文を使用する主プログラム(demo09main.sc)と、SQL文を使用する2個の副プログラム(libsub11.sc、libsub12.sc)を動的リンクします。ロードモジュール名は、副プログラムを“libsub11.so”および“libsub12.so”、主プログラムを“demo09main”とします。

なお、Linuxの場合は、KPICオプションとGオプションの代わりにfPICオプションとsharedオプションを指定します。

cd /home/rdb2/application/src
setenv LD_LIBRARY_PATH_64 /home/rdb2/application/lib:$LD_LIBRARY_PATH_64
setenv LD_LIBRARY_PATH /home/rdb2/application/lib:$LD_LIBRARY_PATH
sqlcc -v9 libsub11.sc -KPIC -G -o ../lib/libsub11.so
sqlcc -v9 libsub12.sc -KPIC -G -o ../lib/libsub12.so
sqlcc -v9 demo09main.sc -o ../bin/demo09main -lsub11 -lsub12
Linux例4

64ビットで実行するアプリケーションを動的リンクする場合の例を示します。SQL文を使用する主プログラム(demo09main.sc)と、SQL文を使用する2個の副プログラム(libsub11.sc、libsub12.sc)を動的リンクします。ロードモジュール名は、副プログラムを“libsub11.so”および“libsub12.so”、主プログラムを“demo09main”とします。

cd /home/rdb2/application/src
setenv LD_LIBRARY_PATH /home/rdb2/application/lib:$LD_LIBRARY_PATH
sqlcc -v9 libsub11.sc -fPIC -shared -o ../lib/libsub11.so
sqlcc -v9 libsub12.sc -fPIC -shared -o ../lib/libsub12.so
sqlcc -v9 demo09main.sc -o ../bin/demo09main -lsub11 -lsub12

COBOL使用時の例

1

SQL文を使用する主プログラム(demo12main.scob)と、SQL文を使用する2個の副プログラム(libsub5.scob、libsub6.scob)を動的リンクします。ロードモジュール名は、副プログラムを“libsub5.so”および“libsub6.so”、主プログラムを“demo12main”とします。

cd /home/rdb2/application/src
setenv LD_LIBRARY_PATH /home/rdb2/application/lib:$LD_LIBRARY_PATH
sqlcobol libsub5.scob -G -o ../lib/libsub5.so
sqlcobol libsub6.scob -G -o ../lib/libsub6.so
sqlcobol demo12main.scob -M -o ../bin/demo12main -lsub5 -lsub6

2

SQL文を使用しない主プログラム(demo13main.cobol)と、SQL文を使用する副プログラム(libsub7.scob)、およびSQL文を使用しない副プログラム(libsub8.cobol)を動的リンクします。ロードモジュール名は、副プログラムを“libsub7.so”および“libsub8.so”、主プログラムを“demo13main”とします。

cd /home/rdb2/application/src
setenv LD_LIBRARY_PATH /home/rdb2/application/lib:$LD_LIBRARY_PATH
sqlcobol libsub7.scob -G -o ../lib/libsub7.so
cobol -G -o ../lib/libsub8.so libsub8.cobo cobol -M -o ../bin/demo13main -lsub7 -lsub8 demo13main.cobol
Linux3

64ビットで実行するアプリケーションを動的リンクする場合の例を示します。SQL文を使用する主プログラム(demo14main.scob)と、SQL文を使用する2個の副プログラム(libsub11.scob、libsub12.scob)を動的リンクします。ロードモジュール名は、副プログラムを“libsub11.so”および“libsub12.so”、主プログラムを“demo14main”とします。

cd /home/rdb2/application/src
setenv LD_LIBRARY_PATH /home/rdb2/application/lib:$LD_LIBRARY_PATH
sqlcobol -v9 libsub11.scob -G -o ../lib/libsub11.so
sqlcobol -v9 libsub12.scob -G -o ../lib/libsub12.so
sqlcobol -v9 demo14main.scob -M -o ../bin/demo14main -lsub11 -lsub12

6.1.4.3 動的プログラム構造のコンパイル・リンク

動的プログラム構造のアプリケーションは、以下に示す方法でコンパイル・リンクします。動的プログラム構造は、COBOLのアプリケーションだけ利用できます。

図6.5 動的プログラム構造の場合のコンパイル・リンクの方法

SQL文を使用するコンパイル単位は、sqlcobolを使用してコンパイル・リンクを行います。

参照

sqlcobolのオプションの指定方法については、“コマンドリファレンス”を参照してください。

動的プログラム構造のロードモジュールを動的リンクして作成するためには、主プログラムのコンパイル・リンク時に、コンパイルオプション“DLOAD”を指定します。副プログラムは共用ライブラリにロードモジュールとして作成しておきます。

アプリケーションを動的リンクする場合に必要なオプションを以下に示します。

表6.7 アプリケーションを動的リンクする場合に必要なオプション

コンパイル対象の性質

指定するオプション

備考

SQL文を含むコンパイル単位

主プログラム

-WC, "DLOAD"

動的プログラム構造の指定

-M

COBOLの場合に指定

副プログラム

動的リンクオプション

動的リンクの指定

例1

動的プログラム構造のSQL文を使用する主プログラム(demo14main.scob)と、SQL文を使用する2個の副プログラム(libsub9.scob、libsub10.scob)を動的リンクします。ロードモジュール名は、副プログラムを“libsub9.so”および“libsub10.so”、主プログラムを“demo14main”とします。

cd /home/rdb2/application/src
setenv LD_LIBRARY_PATH /home/rdb2/application/lib:$LD_LIBRARY_PATH
sqlcobol libsub9.scob -o ../lib/libsub9.so
sqlcobol libsub10.scob -o ../lib/libsub10.so
sqlcobol demo14main.scob -M -o ../bin/demo14main -WC,"DLOAD"
Linux例2

64ビットで実行するアプリケーションを動的リンクする場合の例を示します。動的プログラム構造のSQL文を使用する主プログラム(demo15main.scob)と、SQL文を使用する2個の副プログラム(libsub13.scob、libsub14.scob)を動的リンクします。ロードモジュール名は、副プログラムを“libsub13.so”および“libsub14.so”、主プログラムを“demo15main”とします。

cd /home/rdb2/application/src
setenv LD_LIBRARY_PATH /home/rdb2/application/lib:$LD_LIBRARY_PATH
sqlcobol -v9 libsub13.scob -o ../lib/libsub13.so
sqlcobol -v9 libsub14.scob -o ../lib/libsub14.so
sqlcobol -v9 demo15main.scob -M -o ../bin/demo15main -WC,"DLOAD"