http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jniexamp.htmlにある JNI の記事について質問があります。
gcc -o libnativelib.so -shared -Wl,-soname,libnative.so
-I/export/home/jdk1.2/include
-I/export/home/jdk1.2/include/linux nativelib.c
-static -lc
「-o libnativelib.so」と「-Wl,-soname,libnative.so」の機能について、まだ少し混乱していると思います。
-o libnativelib.so は、gcc の出力ファイル名を libnativelib.so に指定します。私が理解していることから、記事に示されているように、JAVA 側からロードするライブラリ名です。
static {
System.loadLibrary("nativelib");
}
では、'-Wl,-soname,libnative.so' の用途は何ですか?
ld オプションのマニュアルで次の情報を見つけました。
-soname=名前
ELF 共有オブジェクトを作成する場合、内部 DT_SONAME フィールドを指定された名前に設定します。実行可能ファイルが DT_SONAME フィールドを持つ共有オブジェクトにリンクされている場合、実行可能ファイルが実行されると、ダイナミック リンカーは、リンカーに指定されたファイル名を使用するのではなく、DT_SONAME フィールドで指定された共有オブジェクトをロードしようとします。
それで、それはどういう意味ですか?最終的な実行可能ファイルが実行されると、リンカーはロードを試みますか?? それよりも ??の名の下に ??