Проблема java-8-oracle (1.8.0_66) з PrintAssembly "Не вдалося завантажити hsdis-amd64.so"


20

Я намагаюся запускати свої програми з -XX:+PrintAssemblyпараметрами, але завжди отримую повідомлення типу:

64-бітове попередження VM для сервера Java HotSpot (TM): Увімкнено функцію PrintAssembly; увімкнення DebugNonSafepoints для отримання додаткового виводу Неможливо завантажити hsdis-amd64.so; бібліотека не завантажується; Складання монтажу вимкнено

Я завантажив hsdis-amd64.so з Кенаї: https://kenai.com/projects/base-hsdis/downloads

Я створив цю бібліотеку сам за допомогою проекту http://sourceforge.net/projects/fcml/files/fcml-1.1.1/ .

Я ставлю його скрізь "google каже":

/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/
/usr/lib/jvm/java-8-oracle/jre/lib/amd64/
/usr/lib/jvm/java-8-oracle/lib/amd64/

з іменами:

hsdis-amd64.so
libhsdis-amd64.so
hsdis.so
libhsdis.so

Я намагався навіть встановити експорт вручну LD_LIBRARY_PATH=/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/

... і все дарма.

Більше немає результатів Google, більше немає комбінацій вищезазначених рішень :-(

Хтось може мені допомогти?

Відповіді:


10

Спочатку встановіть, libhsdis0-fcmlяк описано в іншій відповіді 1 :

sudo apt-get install libhsdis0-fcml

Це встановлено лише для OpenJDK. Однак ви користуєтеся ними java-8-oracle, тому вам потрібно буде скопіювати його туди. Ось точна команда копіювання, яка працювала для мене:

sudo cp /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/hsdis-amd64.so /usr/lib/jvm/java-8-oracle/jre/lib/amd64/hsdis-amd64.so

Якщо це все ще не працює, ви можете спробувати straceпобачити, де javaшукаєте. Я використав:

strace -f java -XX:CompileCommand='print, *.*' ... |& grep hsdis

щоб отримати такий вихід:

[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libhsdis-amd64.so", O_RDONLY <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libhsdis-amd64.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libhsdis-amd64.so", O_RDONLY|O_NONBLOCK <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/hsdis-amd64.so", O_RDONLY <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/hsdis-amd64.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/hsdis-amd64.so", O_RDONLY|O_NONBLOCK <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/hsdis-amd64.so", O_RDONLY <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/hsdis-amd64.so", O_RDONLY|O_CLOEXEC) = 14

Ви можете бачити, що місця та назви, які ви намагалися, безумовно, є серед тих, що шукали JDK (у моєму випадку, мабуть, він би шукав більше місць, але зупинився, оскільки останнє розташування вище - там, де він знайшов спільний об’єкт).

Зауважте, що вам точно потрібен -fпрапор, straceоскільки власне JVM запускається як дочірній процес оригінальної javaкоманди.

Серед проблем, які straceможуть виявити, є проблема дозволів. Мені потрібно було лише читати perms у бібліотеці для запуску користувача java.

Мій java -versionвихід:

java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

1 Дійсно, це лише спосіб отримати (імовірно працюючий) hsdis.soфайл дружним чином для менеджера пакунків. Ви також можете просто завантажити його безпосередньо з одного з різних джерел.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.