サーバアプリケーションのソースとスケルトンのコンパイル方法、およびリンク方法について説明します。
C言語でアプリケーションを作成した場合について、コンパイルとリンクの手順の流れを以下に示します。
■Windows(R)の場合
サーバアプリケーションは、APMと動的に結合します。このため、サーバアプリケーションは共用ライブラリとし、動的結合ができる状態にしておく必要があります。この共用ライブラリには、サーバアプリケーションが使用するライブラリを結合してください。データベース管理システムのライブラリ以外で、サーバアプリケーションのリンク時に指定するライブラリを以下に示します。
ライブラリ名 | 格納場所 | 用途 |
---|---|---|
f3fmalcapi.lib | C:\Interstage\td\lib | コンポーネントトランザクションサービスランタイム(必須) |
libextpapiskl.lib | C:\Interstage\extp\lib | コンポーネントトランザクションサービスランタイム(必須) |
odsv.lib | C:\Interstage\odwin\lib | CORBAサービスランタイム(必須) |
odcnsv.lib | C:\Interstage\odwin\lib | CORBAサービスランタイム(注) |
odifsv.lib | C:\Interstage\odwin\lib | CORBAサービスランタイム(注) |
注)中継用サーバアプリケーションを作成する時に必要です。
サーバアプリケーションとスケルトンをコンパイル後、リンクする場合のオプションの例を以下に示します。
以下の表に示すオプションを設定してください。
Microsoft(R) Visual C++(R) .NET Standard/Microsoft(R) Visual C++(R) .NET Standard 2003/ Microsoft(R) Visual Studio 2005 の場合は、[プロジェクト]-[プロパティ]-[構成プロパティ]-[C/C++]で設定画面を表示することができます。
カテゴリー | 項目 | 設定値 |
---|---|---|
コード生成 | 構造体メンバのアライメント | 4バイト |
使用するランタイム | マルチスレッド(DLL) | |
プリプロセッサ | プリプロセッサの定義 | "OM_PC","OM_WIN32_BUILD", "__STDC__" を追加 |
また、コンパイル時に利用するインクルードファイルおよびライブラリファイルの格納ディレクトリを登録してください。
Microsoft(R) Visual C++(R) .NET Standard/Microsoft(R) Visual C++(R) .NET Standard 2003の場合は、[ツール]-[オプション]-[Projects]-[VC++ ディレクトリ]の「インクルード ファイル」、「ライブラリ ファイル」で設定画面を表示することができます。
Microsoft(R) Visual Studio 2005の場合は、[ツール]-[オプション]-[プロジェクトおよびソリューション]- [VC++ ディレクトリ]の「インクルード ファイル」、「ライブラリ ファイル」で設定画面を表示することができます。
登録例)
(InterstageをC:\Interstageにインストールした場合)
インクルードファイル
C:\Interstage\odwin\include C:\Interstage\td\include C:\Interstage\extp\include C:\Interstage\ots\include
ライブラリファイル
C:\Interstage\odwin\lib C:\Interstage\td\lib C:\Interstage\ots\lib
■Solarisの場合
注意
スレッドライブラリ(libthread.so)は、スレッドモードで作成する場合にのみ必要です。
サーバアプリケーションは、APMと動的に結合します。このため、サーバアプリケーションは共用ライブラリとし、動的結合ができる状態にしておく必要があります。この共用ライブラリには、サーバアプリケーションが使用するライブラリを結合してください。データベース管理システムのライブラリ以外で、サーバアプリケーションのリンク時に指定するライブラリを以下に示します。
スレッドモードのアプリケーションのコンパイルとリンク
ライブラリ名 | 格納場所 | 用途 |
---|---|---|
libthread.so | /usr/lib | スレッドライブラリ(必須) (注1) |
libtdalcapi.so | コンポーネントトランザクションサービスのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libextpapiskl.so | EXTPのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libsocket.so | /usr/lib | ソケットライブラリ(注2) |
libnsl.so | /usr/lib | nslライブラリ(注2) |
libOM.so | CORBAサービスのインストールディレクトリ/lib | CORBAサービスランタイム |
libOMcn.so | CORBAサービスのインストールディレクトリ/lib | CORBAサービスランタイム(注2) |
注1)スレッドライブラリは必ず結合するライブラリの中で先頭に指定してください。
注2)中継用サーバアプリケーションを作成する時に必要です。
注意
リンクは、表の上から順番に行う必要があります。必要なものだけをリンクしてください。
なお、リンカにより結合処理を行う場合、以下のオプションを指定してください。
-dy -G
サーバアプリケーションとスケルトンをコンパイル後、リンクする手順について例を以下に示します。
cc -c -D_REENTRANT -I/opt/FSUNod/include -I/opt/FSUNtd/include tdsample1_s.c cc -c -D_REENTRANT -l/opt/FSUNod/include -l/opt/FSUNtd/include TD_TDSAMPLE1_INTF_skel.c cc -G -o libsample1.so tdsample1_s.o TD_TDSAMPLE1_INTF_skel.o -lthread \ -L/opt/FSUNtd/lib -ltdalcapi -L/opt/FSUNextp/lib -lextpapiskl
\:継続行
プロセスモードのアプリケーションのコンパイルとリンク
アプリケーションをプロセスモードで動作させる場合は、以下のオプションは指定しないでください。
-mt -D_REENTRANT
サーバアプリケーションのリンク時に指定するライブラリを以下に示します。
ライブラリ名 | 格納場所 | 用途 |
---|---|---|
libtdalcapi_nt.so | コンポーネントトランザクションサービスのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libextpapiskl_nt.so | EXTPのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libOM.so | CORBAサービスのインストールディレクトリ/lib/nt | CORBAサービスランタイム(注) |
libsocket.so | /usr/lib | ソケットライブラリ(注) |
libnsl.so | /usr/lib | TLIライブラリ(注) |
注)中継用サーバアプリケーションを作成する時に必要です。
注意
リンクは、表の上から順番に行う必要があります。必要なものだけをリンクしてください。
なお、リンカにより結合処理を行う場合、以下のオプションを指定してください。
-dy -G
サーバアプリケーションとスケルトンをコンパイル後、リンクする手順について例を以下に示します。
cc -c -I/opt/FSUNod/include -I/opt/FSUNtd/include tdsample1_s.c cc -c -I/opt/FSUNod/include -I/opt/FSUNtd/include TD_TDSAMPLE1_INTF_skel.c cc -G -o libtdsample1_nt.so tdsample1_s.o TD_TDSAMPLE1_INTF_skel.o \ -L/opt/FSUNtd/lib -ltdalcapi_nt -L/opt/FSUNextp/lib -lextpapiskl_nt
\:継続行
注意
作成したアプリケーションライブラリにスレッドライブラリが結合されていないことを確認してください。
アプリケーションのコンパイルならびにリンクの手順に誤りがあった場合や、libthread.soがリンクされている場合、ワークユニット起動/停止処理またはクライアントとの通信が無応答状態となる可能性があります。その場合、以下の対処を行ってください。
当該ワークユニット配下で動作しているアプリケーションプロセスのプロセスIDを特定します。
ps -ef | grep ワークユニット名
当該ワークユニット配下で動作しているアプリケーションプロセスを強制停止します。
kill -9 プロセスID
■Linuxの場合
注意
スレッドライブラリ(libpthread.so)は、スレッドモードで作成する場合にのみ必要です。
サーバアプリケーションは、APMと動的に結合します。このため、サーバアプリケーションは共用ライブラリとし、動的結合ができる状態にしておく必要があります。この共用ライブラリには、サーバアプリケーションが使用するライブラリを結合してください。データベース管理システムのライブラリ以外で、サーバアプリケーションのリンク時に指定するライブラリを以下に示します。
スレッドモードのアプリケーションのコンパイルとリンク
ライブラリ名 | 格納場所 | 用途 |
---|---|---|
libpthread.so | /usr/lib | スレッドライブラリ(必須) (注1) |
libtdalcapi.so | コンポーネントトランザクションサービスのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libextpapiskl.so | EXTPのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libnsl.so | /usr/lib | nslライブラリ(注2) |
libOM.so | CORBAサービスのインストールディレクトリ/lib | CORBAサービスランタイム |
libOMcn.so | CORBAサービスのインストールディレクトリ/lib | CORBAサービスランタイム(注2) |
注1)スレッドライブラリは必ず結合するライブラリの中で先頭に指定してください。
注2)中継用サーバアプリケーションを作成する時に必要です。
注意
リンクは、表の上から順番に行う必要があります。必要なものだけをリンクしてください。
なお、リンカにより結合処理を行う場合、以下のオプションを指定してください。
-shared -fpic
または、
-shared -fPIC
サーバアプリケーションとスケルトンをコンパイル後、リンクする手順について例を以下に示します。
gcc -c -D_REENTRANT -I/opt/FJSVod/include -I/opt/FJSVtd/include tdsample1_s.c gcc -c -D_REENTRANT -l/opt/FJSVod/include -l/opt/FJSVtd/include TD_TDSAMPLE1_INTF_skel.c gcc -shared -fpic -o libsample1.so tdsample1_s.o TD_TDSAMPLE1_INTF_skel.o -lpthread \ -L/opt/FJSVtd/lib -ltdalcapi -L/opt/FJSVextp/lib -lextpapiskl
\:継続行
プロセスモードのアプリケーションのコンパイルとリンク
アプリケーションをプロセスモードで動作させる場合は、以下のオプションは指定しないでください。
-D_REENTRANT
サーバアプリケーションのリンク時に指定するライブラリを以下に示します。
ライブラリ名 | 格納場所 | 用途 |
---|---|---|
libtdalcapi_nt.so | コンポーネントトランザクションサービスのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libextpapiskl_nt.so | EXTPのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libOM.so | CORBAサービスのインストールディレクトリ/lib/nt | CORBAサービスランタイム(注) |
libnsl.so | /usr/lib | TLIライブラリ(注) |
注)中継用サーバアプリケーションを作成する時に必要です。
注意
リンクは、表の上から順番に行う必要があります。必要なものだけをリンクしてください。
なお、リンカにより結合処理を行う場合、以下のオプションを指定してください。
-shared -fpic
または、
-shared -fPIC
サーバアプリケーションとスケルトンをコンパイル後、リンクする手順について例を以下に示します。
gcc -c -I/opt/FJSVod/include -I/opt/FJSVtd/include tdsample1_s.c gcc -c -I/opt/FJSVod/include -I/opt/FJSVtd/include TD_TDSAMPLE1_INTF_skel.c gcc -shared -fpic -o libtdsample1_nt.so tdsample1_s.o TD_TDSAMPLE1_INTF_skel.o \ -L/opt/FJSVtd/lib -ltdalcapi_nt -L/opt/FJSVextp/lib -lextpapiskl_nt
\:継続行
注意
作成したアプリケーションライブラリにスレッドライブラリが結合されていないことを確認してください。
アプリケーションのコンパイルならびにリンクの手順に誤りがあった場合や、libpthread.soがリンクされている場合、ワークユニット起動/停止処理またはクライアントとの通信が無応答状態となる可能性があります。その場合、以下の対処を行ってください。
当該ワークユニット配下で動作しているアプリケーションプロセスのプロセスIDを特定します。
ps -ef | grep ワークユニット名
当該ワークユニット配下で動作しているアプリケーションプロセスを強制停止します。
kill -9 プロセスID