我对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 字段指定的共享对象,而不是使用链接器提供的文件名。
那么这是什么意思呢?当最终的可执行文件运行时,链接器将尝试加载??而不是 ??以??