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

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

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

複数のコンパイル単位から構成されるアプリケーションでは、ロードモジュールはアプリケーションの開発や保守の形態、および実行環境を考慮して、それぞれのコンパイル単位を静的リンクするか、または動的リンクするかを選択します。COBOL言語を使用した場合、コンパイル単位にコード系を指定できますが、1つのロードモジュール内では、コード系を統一しなければなりません。

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

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

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

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

参照

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

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

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

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

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

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

コンパイル対象の性質

指定するオプション

備考

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

主プログラム

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

リンクする副プログラム

-M

COBOLの場合に指定

副プログラム

/c

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

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

主プログラム

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

リンクする副プログラム

-M

COBOLの場合に指定

F3CWDRV.LIB

RDBライブラリの指定(32ビットのシングルスレッドで動作するアプリケーションを静的リンクする場合に使用)

F3CWDRVM.LIB

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

F3CWDRV_IA64.LIB

RDBライブラリの指定(Windows Server(R) 2003 for Itanium、Windows Server(R) 2008 for ItaniumまたはWindows Server(R) 2008 R2 for Itaniumにおいて64ビットのシングルスレッドで動作するアプリケーションを静的リンクする場合に使用)

F3CWDRVM_IA64.LIB

RDBライブラリの指定(Windows Server(R) 2003 for Itanium、Windows Server(R) 2008 for ItaniumまたはWindows Server(R) 2008 R2 for Itaniumにおいて64ビットのマルチスレッドで動作するアプリケーションを静的リンクする場合に使用)

F3CWDRV_x64.LIB

RDBライブラリの指定(Windows(R) XP for x64、Windows Server(R) 2003 x64 Editions、Windows Server(R) 2008 for x64またはWindows Server(R) 2008 R2 for x64において64ビットのシングルスレッドで動作するアプリケーションを静的リンクする場合に使用)

F3CWDRVM_x64.LIB

RDBライブラリの指定(Windows(R) XP for x64、Windows Server(R) 2003 x64 Editions、Windows Server(R) 2008 for x64またはWindows Server(R) 2008 R2 for x64において64ビットのマルチスレッドで動作するアプリケーションを静的リンクする場合に使用)

副プログラム

/c

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

C言語使用時の例

1

SQL文を使用する主プログラム(DEMO04MAIN.SC)と、SQL文を使用する2個の副プログラム(DEMO04SUB1.SC、DEMO04SUB2.SC)を静的リンクします。ロードモジュール名は“DEMO04.EXE”とします。

cd C:\USERS\DEFAULT\APPLICATION\SRC 
sqlcc  DEMO04SUB1.SC /c 
sqlcc DEMO04SUB2.SC /c
sqlcc -L"/out:..\BIN\DEMO04.EXE DEMO04SUB1.OBJ DEMO04SUB2.OBJ" DEMO04MAIN.SC

2

SQL文を使用しない主プログラム(DEMO05MAIN.C)と、SQL文を使用する副プログラム(DEMO05SUB1.SC)、およびSQL文を使用しない副プログラム(DEMO05SUB2.C)を静的リンクします。ロードモジュール名は“DEMO05.EXE”とします。

cd C:\USERS\DEFAULT\APPLICATION\SRC
sqlcc DEMO05SUB1.SC /c
cl /c DEMO05SUB2.C cl DEMO05MAIN.C /Fe..\BIN\DEMO05.EXE DEMO05SUB1.OBJ DEMO05SUB2.OBJ F3CWDRV.LIB

例3

Windows Server(R) 2003 for Itanium、Windows Server(R) 2008 for ItaniumまたはWindows Server(R) 2008 R2 for Itaniumにおいて64ビットで実行するアプリケーションを静的リンクする場合の例を示します。SQL文を使用しない主プログラム(DEMO08MAIN.C)と、SQL文を使用する副プログラム(DEMO08SUB1.SC)、およびSQL文を使用しない副プログラム(DEMO08SUB2.C)を静的リンクします。ロードモジュール名は“DEMO08.EXE”とします。

cd C:\USERS\DEFAULT\APPLICATION\SRC
sqlcc -v9 DEMO08SUB1.SC /c
cl /c DEMO08SUB2.C cl DEMO08MAIN.C /Fe..\BIN\DEMO08.EXE DEMO08SUB1.OBJ DEMO08SUB2.OBJ F3CWDRV_IA64.LIB

4

Windows(R) XP for x64、Windows Server(R) 2003 x64 Editions、Windows Server(R) 2008 for x64またはWindows Server(R) 2008 R2 for x64において64ビットで実行するアプリケーションを静的リンクする場合の例を示します。SQL文を使用しない主プログラム(DEMO08MAIN.C)と、SQL文を使用する副プログラム(DEMO08SUB1.SC)、およびSQL文を使用しない副プログラム(DEMO08SUB2.C)を静的リンクします。ロードモジュール名は“DEMO08.EXE”とします。

cd C:\USERS\DEFAULT\APPLICATION\SRC
sqlcc -v9 DEMO08SUB1.SC /c
cl /c DEMO08SUB2.C cl DEMO08MAIN.C /Fe..\BIN\DEMO08.EXE DEMO08SUB1.OBJ DEMO08SUB2.OBJ F3CWDRV_x64.LIB

COBOL使用時の例

1

SQL文を使用する主プログラム(DEMO06MAIN.SCOB)と、SQL文を使用する2個の副プログラム(DEMO06SUB1.SCOB、DEMO06SUB2.SCOB)を静的リンクします。ロードモジュール名は“DEMO06.EXE”とします。

cd C:\USERS\DEFAULT\APPLICATION\SRC
sqlcobol DEMO06SUB1.SCOB
sqlcobol DEMO06SUB2.SCOB
sqlcobol -L"/out:..\BIN\DEMO06.EXE DEMO06SUB1.OBJ DEMO06SUB2.OBJ" DEMO06MAIN.SCOB -M

2

SQL文を使用しない主プログラム(DEMO07MAIN.COBOL)と、SQL文を使用する副プログラム(DEMO07SUB1.SCOB)、およびSQL文を使用しない副プログラム(DEMO07SUB2.COBOL)を静的リンクします。ロードモジュール名は“DEMO07.EXE”とします。

cd C:\USERS\DEFAULT\APPLICATION\SRC
sqlcobol DEMO07SUB1.SCOB
cobol32 DEMO07SUB2.COBOL cobol32 -M DEMO07MAIN.COBOL link /out:..\BIN\DEMO07.EXE F3CWDRV.LIB DEMO07MAIN.OBJ DEMO07SUB1.OBJ DEMO07SUB2.OBJ F3BICIMP.LIB LIBC.LIB KERNEL32.LIB USER32.LIB

例3

Windows Server(R) 2003 for Itanium、Windows Server(R) 2008 for ItaniumまたはWindows Server(R) 2008 R2 for Itaniumにおいて64ビットで実行するアプリケーションを静的リンクする場合の例を示します。SQL文を使用しない主プログラム(DEMO09MAIN.COBOL)と、SQL文を使用する副プログラム(DEMO09SUB1.SCOB)、およびSQL文を使用しない副プログラム(DEMO09SUB2.COBOL)を静的リンクします。ロードモジュール名は“DEMO09.EXE”とします。

cd C:\USERS\DEFAULT\APPLICATION\SRC
sqlcobol -v9 DEMO09SUB1.SCOB
cobol DEMO09SUB2.COBOL cobol -M DEMO09MAIN.COBOL link /out:..\BIN\DEMO09.EXE F3CWDRV_IA64.LIB DEMO09MAIN.OBJ DEMO09SUB1.OBJ DEMO09SUB2.OBJ F6AGCIMP.LIB LIBCMT.LIB BUFFEROVERFLOWU.LIB KERNEL32.LIB USER32.LIB

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

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

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

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

参照

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

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

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

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

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

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

コンパイル対象の性質

指定するオプション

備考

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

主プログラム

副プログラムのDLL名

リンクする副プログラム

-M

COBOLの場合に指定

副プログラム

動的リンクオプション

動的リンクの指定

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

主プログラム

副プログラムのDLL名

リンクする副プログラム

-M

COBOLの場合に指定

副プログラム

動的リンクオプション

動的リンクの指定

C言語使用時の例

1

SQL文を使用する主プログラム(DEMO10MAIN.SC)と、SQL文を使用する2個の副プログラム(SUB1.SC、SUB2.SC)を動的リンクします。DLL名は、副プログラムを“SUB1.LIB”および“SUB2.LIB”とします。主プログラムのロードモジュール名は、“DEMO10MAIN.EXE”とします。

cd C:\USERS\DEFAULT\APPLICATION\SRC
sqlcc -L"/DLL /EXPORT:SUB1" SUB1.SC
sqlcc -L"/DLL /EXPORT:SUB2" SUB2.SC
sqlcc -L"/out:..\BIN\DEMO10MAIN.EXE SUB1.LIB SUB2.LIB" DEMO10MAIN.SC

例2

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

cd C:\USERS\DEFAULT\APPLICATION\SRC
sqlcc -v9 -L"/DLL /EXPORT:SUB11" SUB11.SC
sqlcc -v9 -L"/DLL /EXPORT:SUB12" SUB12.SC
sqlcc -v9 -L"/out:..\BIN\DEMO15MAIN.EXE SUB11.LIB SUB12.LIB" DEMO15MAIN.SC

例3

SQL文を使用しない主プログラム(DEMO11MAIN.C)と、SQL文を使用する副プログラム(SUB3.SC)、およびSQL文を使用しない副プログラム(SUB4.C)を動的リンクします。副プログラムのライブラリ名は、“SUB3.LIB”および“SUB4.LIB”、主プログラムのロードモジュール名を“DEMO11MAIN.EXE”とします。

cd C:\USERS\DEFAULT\APPLICATION\SRC
sqlcc -L"/DLL /EXPORT:SUB3" SUB3.SC
cl /c SUB4.C link /DLL /EXPORT:SUB4 SUB4.OBJ cl /Fe..\BIN\DEMO11MAIN.EXE DEMO11MAIN.C SUB3.LIB SUB4.LIB

COBOL使用時の例

1

SQL文を使用する主プログラム(DEMO12MAIN.SCOB)と、SQL文を使用する2個の副プログラム(SUB5.SCOB、SUB6.SCOB)を動的リンクします。DLL名は、副プログラムを“SUB5.LIB”および“SUB6.LIB”とします。主プログラムのロードモジュール名は、“DEMO12MAIN.EXE”とします。

cd C:\USERS\DEFAULT\APPLICATION\SRC
sqlcobol -L"/DLL /EXPORT:SUB5" SUB5.SCOB
sqlcobol -L"/DLL /EXPORT:SUB6" SUB6.SCOB
sqlcobol -L"/out:..\BIN\DEMO12MAIN.EXE SUB5.LIB SUB6.LIB" DEMO12MAIN.SCOB -M

例2

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

cd C:\USERS\DEFAULT\APPLICATION\SRC
sqlcobol -v9 -L"/DLL /EXPORT:SUB13" SUB13.SCOB
sqlcobol -v9 -L"/DLL /EXPORT:SUB14" SUB14.SCOB
sqlcobol -v9 -L"/out:..\BIN\DEMO16MAIN.EXE SUB13.LIB SUB14.LIB" DEMO16MAIN.SCOB -M

例3

SQL文を使用しない主プログラム(DEMO13MAIN.COBOL)と、SQL文を使用する副プログラム(SUB7.SCOB)、およびSQL文を使用しない副プログラム(SUB8.COBOL)を動的リンクします。副プログラムのDLL名は、“SUB7.LIB”および“SUB8.LIB”、主プログラムのロードモジュール名を“DEMO13MAIN.EXE”とします。

cd C:\USERS\DEFAULT\APPLICATION\SRC
sqlcobol -L"/DLL /EXPORT:SUB7" SUB7.SCOB 
cobol32 SUB8.COBOL link /DLL /EXPORT:SUB8 SUB8.OBJ F3BICIMP.LIB LIBC.LIB KERNEL32.LIB USER32.LIB cobol32 -M DEMO13MAIN.COBOL link /out:..\BIN\DEMO13MAIN.EXE DEMO13MAIN.OBJ SUB7.LIB SUB8.LIB F3BICIMP.LIB LIBC.LIB KERNEL32.LIB USER32.LIB

例4

64ビットで実行するアプリケーションを動的リンクする場合の例を示します。SQL文を使用しない主プログラム(DEMO17MAIN.COBOL)と、SQL文を使用する副プログラム(SUB15.SCOB)、およびSQL文を使用しない副プログラム(SUB16.COBOL)を動的リンクします。副プログラムのDLL名は、“SUB15.LIB”および“SUB16.LIB”、主プログラムのロードモジュール名を“DEMO17MAIN.EXE”とします。

cd C:\USERS\DEFAULT\APPLICATION\SRC
sqlcobol -v9 -L"/DLL /EXPORT:SUB15" SUB15.SCOB 
cobol SUB16.COBOL link /DLL /EXPORT:SUB16 SUB16.OBJ F6AGCIMP.LIB LIBCMT.LIB BUFFEROVERFLOW.LIB KERNEL32.LIB USER32.LIB cobol -M DEMO17MAIN.COBOL link /out:..\BIN\DEMO17MAIN.EXE DEMO17MAIN.OBJ SUB15.LIB SUB16.LIB F6AGCIMP.LIB LIBCMT.LIB BUFFEROVERFLOW.LIB KERNEL32.LIB USER32.LIB

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

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

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

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

参照

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

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

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

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

コンパイル対象の性質

指定するオプション

備考

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

主プログラム

-WC, "DLOAD"

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

-M

COBOLの場合に指定

副プログラム

動的リンクオプション

動的リンクの指定

例1

動的プログラム構造のSQL文を使用する主プログラム(DEMO14MAIN.SCOB)と、SQL文を使用する2個の副プログラム(SUB9.SCOB、SUB10.SCOB)を動的リンクします。DLL名は、副プログラムを“SUB9.LIB”および“SUB10.LIB”、主プログラムのロードモジュール名は、“DEMO14MAIN.EXE”とします。

cd C:\USERS\DEFAULT\APPLICATION\SRC
sqlcobol -L"/DLL /EXPORT:SUB9" SUB9.SCOB
sqlcobol -L"/DLL /EXPORT:SUB10" SUB10.SCOB
sqlcobol -L"/out:..\BIN\DEMO14MAIN.EXE SUB9.LIB SUB10.LIB" DEMO14MAIN.SCOB -M -WC,"DLOAD"

例2

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

cd C:\USERS\DEFAULT\APPLICATION\SRC
sqlcobol -v9 -L"/DLL /EXPORT:SUB17" SUB17.SCOB
sqlcobol -v9 -L"/DLL /EXPORT:SUB18" SUB18.SCOB
sqlcobol -v9 -L"/out:..\BIN\DEMO18MAIN.EXE SUB17.LIB SUB18.LIB" DEMO18MAIN.SCOB -M -WC,"DLOAD"