前項では、SQL文を使用するアプリケーションが1つのコンパイル単位である場合の、コンパイル・リンクの方法について説明しました。一方、大規模なアプリケーションの開発においては、複数のコンパイル単位から構成されるアプリケーションを作成し、これらをコンパイル・リンクするような開発方法が必要となります。本項では、このようなアプリケーションがSQL文を使用する場合の、コンパイル・リンクの方法について説明します。
複数のコンパイル単位から構成されるアプリケーションでは、ロードモジュールはアプリケーションの開発や保守の形態、および実行環境を考慮して、それぞれのコンパイル単位を静的リンクするか、または動的リンクするかを選択します。
注意
複数のファイルで構成されるアプリケーションを実行する場合は、同名のSQL文識別子名は使用できません。
複数のコンパイル単位を静的リンクする場合のコンパイル・リンクの方法を以下に示します。
図6.3 複数のコンパイル単位を静的リンクする場合のコンパイル・リンクの方法
SQL文を使用するコンパイル単位は、sqlcc、sqlfccまたはsqlcobolを使用してコンパイル・リンクを行います。
参照
sqlcc、sqlfccおよびsqlcobolのオプションの指定方法については、“コマンドリファレンス”を参照してください。
アプリケーションによっては、SQL文を使用しないコンパイル単位が存在する場合があります。SQL文を使用しないコンパイル単位は、ccコマンド、gccコマンド、fccコマンドまたはcobolコマンドを使用してコンパイル・リンクを行います。
また、ロードモジュールを静的リンクして作成するには、副プログラムのオブジェクトファイルを作成し、主プログラムに静的にリンクする必要があります。
アプリケーションを静的リンクする場合に必要なオプションを以下に示します。
C言語使用時の例
以下の例において、sqlfccを利用する場合は、sqlccをsqlfccに、またccをfccに置き換えたものになります。
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
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
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
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使用時の例
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
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
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/FSUNrdb2b/lib -lsql64drv demo08main.cobol demo08sub1.o demo08sub2.o
64ビットで実行するアプリケーションを静的リンクする場合の例を示します。SQL文を使用しない主プログラム(demo09main.cobol)と、SQL文を使用する副プログラム(demo09sub1.scob)、およびSQL文を使用しない副プログラム(demo09sub2.cobol)を静的リンクします。ロードモジュール名は“demo09”とします。
cd /home/rdb2/application/src sqlcobol -v9 demo09sub1.scob -c
cobol -c demo09sub2.cobol cobol -M -o ../bin/demo09 -L/opt/FJSVrdb2b/lib -lsql64drv demo09main.cobol demo09sub1.o demo09sub2.o
複数のコンパイル単位を動的リンクする場合のコンパイル・リンクの方法を以下に示します。
図6.4 複数のコンパイル単位を動的リンクする場合のコンパイル・リンクの方法
SQL文を使用するコンパイル単位は、sqlcc、sqlfccまたはsqlcobolを使用してコンパイル・リンクを行います。
参照
sqlcc、sqlfccおよびsqlcobolのオプションの指定方法については、“コマンドリファレンス”を参照してください。
アプリケーションによっては、SQL文を使用しないコンパイル単位が存在する場合があります。
SQL文を使用しないコンパイル単位は、ccコマンド、gccコマンド、fccコマンドまたはcobolコマンドを使用してコンパイル・リンクを行います。
また、ロードモジュールを動的リンクして作成するためには、副プログラムは共用ライブラリにロードモジュールとして作成し、主プログラムのコンパイル・リンク時にリンクする副プログラムのロードモジュール名を指定する必要があります。
アプリケーションを動的リンクする場合に必要なオプションを以下に示します。
C言語使用時の例
以下の例において、sqlfccを利用する場合は、sqlccをsqlfccに、またccをfccに置き換えたものになります。
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
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
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
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使用時の例
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
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
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
動的プログラム構造のアプリケーションは、以下に示す方法でコンパイル・リンクします。動的プログラム構造は、COBOLのアプリケーションだけ利用できます。
図6.5 動的プログラム構造の場合のコンパイル・リンクの方法
SQL文を使用するコンパイル単位は、sqlcobolを使用してコンパイル・リンクを行います。
参照
sqlcobolのオプションの指定方法については、“コマンドリファレンス”を参照してください。
動的プログラム構造のロードモジュールを動的リンクして作成するためには、主プログラムのコンパイル・リンク時に、コンパイルオプション“DLOAD”を指定します。副プログラムは共用ライブラリにロードモジュールとして作成しておきます。
アプリケーションを動的リンクする場合に必要なオプションを以下に示します。
コンパイル対象の性質 | 指定するオプション | 備考 | |
---|---|---|---|
SQL文を含むコンパイル単位 | 主プログラム | -WC, "DLOAD" | 動的プログラム構造の指定 |
-M | COBOLの場合に指定 | ||
副プログラム | 動的リンクオプション | 動的リンクの指定 |
動的プログラム構造の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"
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"