ページの先頭行へ戻る
Interstage Application Server V12.2.0 アプリケーション作成ガイド(データベース連携サービス編)
FUJITSU Software

H.4.2 サーバアプリケーションのコンパイル・リンク

サーバアプリケーションのソースとスケルトンのコンパイル方法、およびリンク方法について説明します。

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にインストールした場合)

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がリンクされている場合、ワークユニット起動/停止処理またはクライアントとの通信が無応答状態となる可能性があります。その場合、以下の対処を行ってください。

  1. 当該ワークユニット配下で動作しているアプリケーションプロセスのプロセスIDを特定します。

    ps -ef | grep ワークユニット名
  2. 当該ワークユニット配下で動作しているアプリケーションプロセスを強制停止します。

    kill -9 プロセスID