サーバアプリケーションのソースとスケルトンのコンパイル方法、およびリンク方法について説明します。
C++言語でアプリケーションを作成した場合について、コンパイルとリンクの手順の流れを以下に示します。
■Windows(R)の場合
サーバアプリケーション実行可能ファイルは、スケルトンとサーバアプリケーションが使用するライブラリで静的に結合します。データベース管理システムのライブラリ以外で、サーバアプリケーションのリンク時に指定するライブラリを以下に示します。
ライブラリ名 | 格納場所 | 用途 |
---|---|---|
fjotsld.obj | C:\Interstage\ots\lib | グローバルトランザクション連携用オブジェクト(必須) |
libservapl.lib | C:\Interstage\ots\lib | グローバルトランザクション連携用ライブラリ(必須) |
libservaplcpp.lib | C:\Interstage\ots\lib | グローバルトランザクション連携用ライブラリ(必須) |
libtdcurrent.lib | C:\Interstage\ots\lib | グローバルトランザクション連携用ライブラリ(通常時必須、中継サーバアプリケーション作成時不要) |
libtacebasent.lib | C:\Interstage\ots\lib | グローバルトランザクション連携用ライブラリ(必須) |
libfjots.lib | C:\Interstage\ots\lib | グローバルトランザクション連携用ライブラリ(必須) |
odsv.lib | C:\Interstage\odwin\lib | CORBAサービスランタイム(必須) |
odsvcpp.lib | C:\Interstage\odwin\lib | CORBAサービスランタイム(必須) |
odcnscpp.lib | C:\Interstage\odwin\lib | CORBAサービスランタイム(注) |
libtdtmapmcpp.lib | C:\Interstage\td\lib | TDランタイム(通常時必須、中継サーバアプリケーションのデータベースアクセスなしの場合は不要。libtdtmapmcntcpp.lib選択する) |
libtdtmapmcntcpp.lib | C:\Interstage\td\lib | TDランタイム(中継サーバアプリケーションのデータベースアクセスなしの場合)(注) |
libextpapmlibTD.lib | C:\Interstage\extp\lib | TDランタイム(通常時必須、中継サーバアプリケーションのデータベースアクセスなしの場合、libextpapmlibTDNORMCNT.lib選択) |
libextpapmlibTDNORMCNT.lib | C:\Interstage\extp\lib | TDランタイム(中継サーバアプリケーションのデータベースアクセスなしの場合)(注) |
libextpapiskl.lib | C:\Interstage\extp\lib | TDランタイム(必須) |
f3fmalcapi.lib | C:\Interstage\td\lib | TDランタイム(必須) |
f3fmapicpp.lib | C:\Interstage\td\lib | TDランタイム(必須) |
libextpapmcom.lib | C:\Interstage\extp\lib | TDランタイム(必須) |
libextpapmbase.lib | C:\Interstage\extp\lib | TDランタイム(必須) |
注)中継用サーバアプリケーションを作成するときに必要です。
注意
リンクは、表の上から順番に行う必要があります。必要なものだけをリンクしてください。
サーバアプリケーションとスケルトンをVisual C++でコンパイル後、リンクする場合のオプションの例を以下に示します。
以下の表に示すオプションを設定してください。
カテゴリー | 項目 | 設定値 |
---|---|---|
コード生成 | 構造体メンバのアライメント | 4バイト |
使用するランタイム | マルチスレッド(DLL) | |
プリプロセッサ | プリプロセッサの定義 | "OM_PC","OM_WIN32_BUILD", "__STDC__" を追加 |
また、コンパイル時に利用するインクルードファイルおよびライブラリファイルの格納ディレクトリを登録してください。
登録例)
(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\extp\lib C:\Interstage\ots\lib
■Linuxの場合
注意
スレッドライブラリ(libpthread.so)は、スレッドモードで作成する場合にのみ必要です。
サーバアプリケーション実行可能ファイルは、スケルトンとサーバアプリケーションが使用するライブラリで静的に結合します。データベース管理システムのライブラリ以外で、サーバアプリケーションのリンク時に指定するライブラリを以下に示します。
スレッドモードのアプリケーションのコンパイルとリンク
ライブラリ名 | 格納場所 | 用途 |
---|---|---|
libpthread.so | /usr/lib | スレッドライブラリ(必須)(注1) |
libC.so | /usr/lib | Cライブラリ(必須) |
libtdservapl_mt.so | データベース連携サービスのインストールディレクトリ/lib | グローバルトランザクション連携用ライブラリ(必須) |
libservaplcpp_mt.so | データベース連携サービスのインストールディレクトリ/lib | グローバルトランザクション連携用ライブラリ(必須) |
libtdCurrent.so | データベース連携サービスのインストールディレクトリ/lib | グローバルトランザクション連携用ライブラリ(中継サーバアプリケーション時不要) |
libCurrent_CPP.so | データベース連携サービスのインストールディレクトリ/lib | グローバルトランザクション連携用ライブラリ(中継サーバアプリケーション時不要) |
libtacebase.so | データベース連携サービスのインストールディレクトリ/lib | グローバルトランザクション連携用ライブラリ(必須) |
libfjotsthr.so | データベース連携サービスのインストールディレクトリ/lib | グローバルトランザクション連携用ライブラリ(必須) |
libnsl.so | /usr/lib | Nslライブラリ(注2) |
libOM.so | CORBAサービスのインストールディレクトリ/lib | CORBAサービスランタイム |
libOMcncpp.so | CORBAサービスのインストールディレクトリ/lib | CORBAサービスランタイム(注2) |
libOMcpp.so | CORBAサービスのインストールディレクトリ/lib | CORBAサービスランタイム(必須) |
libtdtmapmcpp.so | コンポーネントトランザクションサービスのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libtdtmapmcntcpp.so | コンポーネントトランザクションサービスのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(グローバルトランザクションとローカルトランザクションが混在する場合) |
libextpapmlibTD.so | EXTPのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(通常時必須、中継サーバアプリケーションのデータベースアクセスなしの場合、libextpapmlibTDNORMCNT.so選択) |
libextpapmlibTDNORMCNT.so | EXTPのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(グローバルトランザクションとローカルトランザクションが混在する場合) |
libextpapiskl.so | EXTPのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libtdalcapi.so | コンポーネントトランザクションサービスのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libtdapicpp.so | コンポーネントトランザクションサービスのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libextpapmcom.so | EXTPのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libextpapmbase.so | EXTPのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
注1)スレッドライブラリは必ず結合するライブラリの中で先頭に指定してください。
注2)中継用サーバアプリケーションを作成するときに必要です。
注意
リンクは、表の上から順番に行う必要があります。必要なものだけをリンクしてください。
サーバアプリケーションとスケルトンをコンパイル後、リンクする手順について例を以下に示します。
g++ -I. -I/opt/FJSVod/include -I/opt/FJSVtd/include \ -I/opt/FJSVextp/include -D_REENTRANT -o tdsample1_s.o -c tdsample1_s.C g++ -I. -I/opt/FJSVod/include -I/opt/FJSVtd/include \ -I/opt/FJSVextp/include -D_REENTRANT \ -o TD_TDSAMPLE1_INTF_skel_c++.o -c TD_TDSAMPLE1_INTF_skel_c++.C g++ -I. -I/opt/FJSVod/include -I/opt/FJSVtd/include \ -I/opt/FJSVextp/include -D_REENTRANT -o TD_tdsample1_c++.o -c TD_tdsample1_c++.C g++ -I. -I/opt/FJSVod/include -I/opt/FJSVtd/include \ -I/opt/FJSVextp/include -D_REENTRANT \ -o tdsample1_s tdsample1_s.o TD_TDSAMPLE1_INTF_skel_c++.o TD_tdsample1_c++.o \ -lpthread -lnsl /opt/FJSVots/lib/libotsxaora.o \ -L/opt/$ORACLE_HOME/lib -lclntsh -lclient12 -lsql12 -lcommon12 \ -lcore12 -lnls12 -L/opt/FJSVots/lib -ltdservapl_mt -lservaplcpp \ -ltdCurrent -ltacebase -lfjotsthr -L/opt/FJSVod/lib -lOMcpp -lOM -lOMcncpp \ -L/opt/FJSVextp/lib -lextpapiskl -lextpapmbase \ -lextpapmcom -lextpapmlibTDNORM -lextpapmTDNORM -lextpmomo -lextpmomo_sys \ -L/opt/FJSVtd/lib -ltdtmapmcpp -ltdalcapi -ltdapicpp -L/opt/SUNWspro/lib -lC
\:継続行
プロセスモードのアプリケーションのコンパイルとリンク
アプリケーションをプロセスモードで動作させる場合は、以下のオプションは指定しないでください。
-D_REENTRANT
ライブラリ名 | 格納場所 | 用途 |
---|---|---|
libC.so | /usr/lib | Cライブラリ(必須) |
libservapl.so | データベース連携サービスのインストールディレクトリ/lib | グローバルトランザクション連携用ライブラリ(必須) |
libservaplcpp.so | データベース連携サービスのインストールディレクトリ/lib | グローバルトランザクション連携用ライブラリ(必須) |
libCurrentnt.so | データベース連携サービスのインストールディレクトリ/lib | グローバルトランザクション連携用ライブラリ(中継サーバアプリケーション時不要) |
libCurrent_CPP.so | データベース連携サービスのインストールディレクトリ/lib | グローバルトランザクション連携用ライブラリ(中継サーバアプリケーション時不要) |
libtacebasent.so | データベース連携サービスのインストールディレクトリ/lib | グローバルトランザクション連携用ライブラリ(必須) |
libfjots.so | データベース連携サービスのインストールディレクトリ/lib | グローバルトランザクション連携用ライブラリ(必須) |
libnsl.so | /usr/lib | Nslライブラリ(注) |
libOM.so | CORBAサービスのインストールディレクトリ/lib/nt | CORBAサービスランタイム |
libOMcncpp.so | CORBAサービスのインストールディレクトリ/lib | CORBAサービスランタイム(注) |
libOMcpp.so | CORBAサービスのインストールディレクトリ/lib | CORBAサービスランタイム(必須) |
libtdtmapmcpp_nt.so | コンポーネントトランザクションサービスのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libtdtmapmcntcpp_nt.so | コンポーネントトランザクションサービスのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(グローバルトランザクションとローカルトランザクションが混在する場合) |
libextpapmlibTD_nt.so | EXTPのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(通常時必須、中継サーバアプリケーションのデータベースアクセスなしの場合、libextpapmlibTDNORMCNT.so選択) |
libextpapmlibTDNORMCNT_nt.so | EXTPのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(グローバルトランザクションとローカルトランザクションが混在する場合) |
libextpapiskl_nt.so | EXTPのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libtdalcapi_nt.so | コンポーネントトランザクションサービスのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libtdapicpp_nt.so | コンポーネントトランザクションサービスのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libextpapmcom_nt.so | EXTPのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
libextpapmbase_nt.so | EXTPのインストールディレクトリ/lib | コンポーネントトランザクションサービスランタイム(必須) |
注)中継用サーバアプリケーションを作成するときに必要です。
注意
リンクは、表の上から順番に行う必要があります。必要なものだけをリンクしてください。
サーバアプリケーションとスケルトンをコンパイル後、リンクする手順について例を以下に示します。
g++ -I. -I/opt/FJSVod/include -I/opt/FJSVtd/include \ -I/opt/FJSVextp/include -o tdsample1_s.o -c tdsample1_s.C g++ -I. -I/opt/FJSVod/include -I/opt/FJSVtd/include -I/opt/FJSVextp/include \ -o TD_TDSAMPLE1_INTF_skel_c++.o -c TD_TDSAMPLE1_INTF_skel_c++.C g++ -I. -I/opt/FJSVod/include -I/opt/FJSVtd/include -I/opt/FJSVextp/include \ -o TD_tdsample1_c++.o -c TD_tdsample1_c++.C g++ -I. -I/opt/FJSVod/include -I/opt/FJSVtd/include -I/opt/FJSVextp/include \ -o tdsample1_s tdsample1_s.o TD_TDSAMPLE1_INTF_skel_c++.o TD_tdsample1_c++.o \ -lnsl /opt/FJSVots/lib/libotsxaora.o \ -L/opt/$ORACLE_HOME/lib -lclntsh -lclient12 -lsql12 -lcommon12 -lcore12 -lnls12 \ -L/opt/FJSVots/lib -lservapl -lservaplcpp -lCurrentnt -ltacebasent -lfjots \ -L/opt/FJSVod/lib/nt -lOM -L/opt/FJSVod/lib -lOMcpp -lOMcncpp \ -L/opt/FJSVextp/lib -lextpapiskl_nt -lextpapmbase_nt \ -lextpapmcom_nt -lextpapmlibTDNORM_nt -lextpapmTDNORM_nt -lextpmomo_nt -lextpmomo_sys_nt \ -L/opt/FJSVtd/lib -ltdtmapmcpp_nt -ltdalcapi_nt -ltdapicpp_nt -L/opt/SUNWspro/lib -lC
注)中継用サーバアプリケーションを作成するときに必要です。
注意
作成したアプリケーションライブラリにスレッドライブラリが結合されていないことを確認してください。
アプリケーションのコンパイルならびにリンクの手順に誤りがあった場合や、libpthread.soがリンクされている場合、ワークユニット起動/停止処理またはクライアントとの通信が無応答状態となる可能性があります。その場合、以下の対処を行ってください。
当該ワークユニット配下で動作しているアプリケーションプロセスのプロセスIDを特定します。
ps -ef | grep ワークユニット名
当該ワークユニット配下で動作しているアプリケーションプロセスを強制停止します。
kill -9 プロセスID