Java JVM加载共享库的过程是什么?

Java JVM加载共享库的过程是什么?,java,linux,jvm,Java,Linux,Jvm,在Linux机器上安装32位和64位本机共享库时,JVM如何选择要选择的内容,以及它如何真正知道要选择哪一个?程序javac和java已链接到使用某些库。只需运行如下命令: ldd /extra/JDK8u5/jdk1.8.0_05/bin/java linux-gate.so.1 => (0xb7846000) libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7819000) libjli.so => /

在Linux机器上安装32位和64位本机共享库时,JVM如何选择要选择的内容,以及它如何真正知道要选择哪一个?

程序javac和java已链接到使用某些库。只需运行如下命令:

ldd /extra/JDK8u5/jdk1.8.0_05/bin/java

linux-gate.so.1 =>  (0xb7846000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7819000)
libjli.so => /home/extra/JDK8u5/jdk1.8.0_05/bin/../lib/i386/jli/libjli.so (0xb7804000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb77ff000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb769c000)
/lib/ld-linux.so.2 (0xb7847000)

这些是为本机库预定义的链接器,对吗?例如,linux系统中存在用户定义的库,这些库被分配给$LD_LIBRARY_PATH,其中包含32位库和64位库。它是如何决定选哪一个的?在这种情况下,链接器从何而来?它背后的逻辑是什么?例如,对于gcc:要使用的库的路径部分内置在编译器中,并且可以添加到build命令中。32位和64位之间的区别是由于选择了目标机器。(也有可能在相同的硬件架构下使用不同的对象格式,例如在RedHat3和RedHat4之间;同样,交叉编译时需要选择目标。)