2017-02-02 6 views
0

私は64ビットJavaプロセス内でRHEL 64上でdlopen ("libjvm.so", RTLD_NOLOAD)を呼び出しています。そして、それはエラーで失敗します。Rhel 7.2でdlopenが失敗するlibjvm.soのために64ビット

libjvm.so: invalid mode for dlopen(): Invalid argument 

私はlsof -p <pid of java process>を行なったし、それがロードされたモジュールとしてlibjvm.soを示しています。 libjvm.soはパスjre1.8.0_121/lib/amd64/server/libjvm.soからロードされます。 このエラーについて詳しく知ることはできません。 javaの32ビット版を使用する場合、同じことがうまく動作します。 libjvm.soがlib/i386/clientディレクトリからロードされています。理由を探す場所、またはこのエラーが実際に何を意味するかについてのあらゆる情報を歓迎します。ありがとう。

答えて

1

invalid mode for dlopen()

これは正しくありません。無効モードでdlopenと呼ばれています。あなたの応答のためのdlopen man page

One of the following two values must be included in flags: 
    RTLD_LAZY ... 
    RTLD_NOW ...    
+0

おかげから

。 32ビットのJavaプロセスを使用すると、同じことがうまくいきます。私はそのライブラリをロードしたくない...私はちょうど既にロードされているものにハンドルを取得したい。 – Prakash

+0

応答に感謝します.. RTLD_LAZY | RTLD_NOLOADが動作しています..なぜこれが64xに必要なのか分かりません.32ではRTLD_NOLOADだけで動作します。 – Prakash

+0

私はちょうどGLIBCのソースをチェックし、 "RTLD_ {NOW、LAZY} 1998年に追加されました。私は32ビットモードでこれがなぜあなたのために機能するのか説明はありません。それはすべきではない。 'dlopen(" libc.so.6 "、RTLD_NOLOAD)'しようとする私のシステム上での簡単なテストは、32ビットモードと64ビットモードの両方で失敗します。 –

関連する問題