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

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

サーバアプリケーションのソースとスケルトンのコンパイル方法、およびリンク方法について説明します。
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にインストールした場合)

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

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

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

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

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

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

    kill -9 プロセスID