2012-04-19 13 views
1

私のJavaコードは、JNI経由で共有ライブラリ(libtest.soなど)のC++コードを呼び出します。このコードには、libdebug.soという特別なデバッグシンボルが組み込まれています。私はJNIコードのLD_PRELOAD変数

LD_PRELOAD =は/ usr/libdebug.so/libのJavaのcom.test.myMain

を呼び出すと実行が(ロードされていないlibdebug.soからシンボルのでException in thread "main" java.lang.UnsatisfiedLinkError

で停止しますなぜ?)。

私のコードを変更して、自分のJavaコード内のライブラリをPRELOADすることが可能かどうかは疑問でした。 (もちろん私はlibdebug.soでjavaをコンパイルしたくないです...)

答えて

1

System.loadすべての共有ライブラリをロードするために使用することができます。したがって、デバッグライブラリをスタティックブロックにロードすると、System.loadあなたのJNI libを読み込みます)。 またはJNI libの前にSystem.loadLibary("debug")をお試しください。

+0

複数のライブラリをロードするにはどうすればよいですか?私は1つのコマンドでそれを行うことはできますか、または複数のコマンドが必要ですか? – cateof

+1

AFAIKの 'load'を複数回呼び出す必要があります。 – Neet

関連する問題