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
ディレクトリからロードされています。理由を探す場所、またはこのエラーが実際に何を意味するかについてのあらゆる情報を歓迎します。ありがとう。
おかげから
。 32ビットのJavaプロセスを使用すると、同じことがうまくいきます。私はそのライブラリをロードしたくない...私はちょうど既にロードされているものにハンドルを取得したい。 – Prakash
応答に感謝します.. RTLD_LAZY | RTLD_NOLOADが動作しています..なぜこれが64xに必要なのか分かりません.32ではRTLD_NOLOADだけで動作します。 – Prakash
私はちょうどGLIBCのソースをチェックし、 "RTLD_ {NOW、LAZY} 1998年に追加されました。私は32ビットモードでこれがなぜあなたのために機能するのか説明はありません。それはすべきではない。 'dlopen(" libc.so.6 "、RTLD_NOLOAD)'しようとする私のシステム上での簡単なテストは、32ビットモードと64ビットモードの両方で失敗します。 –