2

私の Java コードは、JNI を介して、共有ライブラリ (libtest.so など) からいくつかの C++ コードを呼び出します。コードには、libdebug.so に存在するいくつかの特別なデバッグ シンボルが組み込まれています。電話すると

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

実行はで停止しますException in thread "main" java.lang.UnsatisfiedLinkError

libdebug.so のシンボルがロードされていないためです (なぜですか?)。

Java コード内のライブラリを PRELOAD するためにコードを変更できるかどうか疑問に思っていました。(もちろん、libdebug.so で Java をコンパイルしたくありません...)

4

1 に答える 1

1

System.load任意の共有ライブラリをロードするために使用できるため、System.load(JNI ライブラリをロードする前に) を使用して静的ブロックにデバッグ ライブラリをロードしてみてください。またはSystem.loadLibary("debug")、JNI ライブラリの前に試してください。

于 2012-04-19T08:20:08.067 に答える