Как происходит загрузка совместно используемых библиотек JVM?

1

Когда на компьютере с Linux установлены 32-разрядные и 64-разрядные родные общие библиотеки, как JVM выбирает, что выбрать, и как он действительно знает, какой из них выбрать?

Теги:
jvm

1 ответ

2
Лучший ответ

Программы 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)
  • 0
    Хорошо, это компоновщики, предопределенные для нативных библиотек, верно? Например, пользовательские библиотеки присутствуют в системе Linux, и они назначены на $ LD_LIBRARY_PATH, который содержит как 32-битные, так и 64-битные библиотеки. Как он решает, какой взять? Откуда в этом случае появляется линкер? и какая логика стоит за этим?
  • 0
    Например, для gcc: пути к используемым библиотекам частично встроены в компилятор и могут быть добавлены в команду build. Различие между 32- и 64-битным связано с выбором целевой машины. (Существует также возможность иметь разные форматы объектов с одинаковой архитектурой HW, как, например, между RedHat3 и RedHat4; опять же, вопрос выбора цели при кросс-компиляции.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню