- - PR -
WebLogic+JNIでのライブラリ格納ディレクトリ+設定
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-02-05 03:53
WebLogic上のServlet Helperクラスから、
JNIを通してCのライブラリにアクセスしようとしているのですが、 System.loadLibrary()実行時に、 「unsatisfiedlinkerror」が出てライブラリにリンクが出来ません。 おそらく環境設定で間違っていると思われます。 どなたか実績のある方、情報のご提供を御願いいたします。 1)ライブラリをどこに格納したか? 2)ライブラリロードのパスをどのように指定したか? 3)その他注意事項は? ※WebLogicを使用しない通常のクラスでは正常に動作しています。 「LD_LIBRARY_PATH」にlib.XXXX.slを設定 ※WebLogic起動シェルに「LD_LIBRARY_PATH:lib.XXXX.sl」を設定済。 WebLogic起動ユーザの権限ではlib.XXXX.slのパーミッションはすべてありです。 動作環境を以下に示します。 ・OS:HP−UX ・AP Server:WebLogic8.1 | ||||||||||||
|
投稿日時: 2004-02-05 08:31
不確かな情報ですけど。
HP-UXって[LD_LIBRARY_PATH]でしたっけ? [SHLIB_PATH]だったような・・・ | ||||||||||||
|
投稿日時: 2004-02-05 13:55
失礼しました。
設定していたのは 「LD_LIBRARY_PATH」ではなく「SHLIB_PATH」でした。 「SHLIB_PATH」を設定しているのですが、 なぜかライブラリがロードできないようです。 | ||||||||||||
|
投稿日時: 2004-02-06 03:04
またまた失礼しました。
パッケージをつけて実行したら、 Weblogicを使用しないClassからも 「unsatisfiedlinkerror」が出て実行不可能でした。 ライブラリの配置の問題だと思うのですが、 「SHLIB_PATH」を通すだけではだめなのでしょうか・・・ 手順は以下のとおりやっているのですが、手順に問題があるのでしょうか? 1.Javaソースをコンパイル java xxx/yyy/zzz.java 2.ヘッダを作成 javah -verbose -jni xxx/yyy/zzz 3.ヘッダを取り込んだ、Cのライブラリをコンパイルリンク 4.ライブラリのパスにSHLIB_PATHを設定してJavaの実行 | ||||||||||||
|
投稿日時: 2004-02-06 10:44
パッケージをつけると、JNIで呼び出すCの関数名にもパッケージ名が含まれます。 Cのソースに、この関数名を使ってますでしょうか? たとえば、以下のクラスの場合、xxx.yyy.Zzz#jniMethod がJavaで次のように 定義されているとすると:
javahで生成した xxx.yyy.Zzz#jniMethod に対応するの関数名は次のようになります。
| ||||||||||||
|
投稿日時: 2004-02-08 12:27
unibon です。こんにちわ。
あまり良く知らないのでちゃんと説明できないのですが、考えられる点としては、Servlet コンテナはクラスローダが分離しているので、もしも static initializer の中で loadLibrary していたりすると、複数回の JNI のライブラリのロードで問題がでる可能性があります。 ただし、この場合であっても初回は成功するはずです。 もうひとつ、別の可能性としては、指定したライブラリパスを見てくれていない可能性があります。以前に Linux 上の Sun Java で、JNI を使う際に、どう指定してもライブラリをロードしてくれず、デバッガでロードしている個所を調べて使っているパスを調べた結果、 jre/lib/i386 だけしか見てくれていないことが分かり、とりあえずそこに置いたらロードできたことがあります。 #これが真の正解ではないでしょうが。 | ||||||||||||
|
投稿日時: 2004-02-08 22:09
ようやくJNI連携できました。
皆さん情報ご提供ありがとうございます。 Cの実装部分に問題がありました。 以下のようにしたら動きました。 1)パッケージ名をつけたヘッダを取込 ⇒C実装のリコンパイル 2)「SHLIB_PATH」にライブラリを配置して、Weblogigを再起動 パッケージを付けたJNIは難しいですね。 | ||||||||||||
|
投稿日時: 2004-02-09 13:04
こんにちは、おばけ@元某H/Wベンダです
すみません、もう解決されたようで蛇足ですが、
hp-uxではSHLIB_PATHが正解です。 LD_LIBRARY_PATHはSolarisですよね。 |