PrintAssembly ile java-8-oracle (1.8.0_66) sorunu “hsdis-amd64.so yüklenemedi”


20

Programlarımı -XX:+PrintAssemblyseçeneklerle çalıştırmaya çalışıyorum ancak her zaman şöyle mesajı alıyorum:

Java HotSpot (TM) 64-Bit Sunucu VM uyarısı: PrintAssembly etkindir; ek çıktı elde etmek için DebugNonSafepoints açıldı hsdis-amd64.so; kütüphane yüklenemez; PrintAssembly devre dışı

Hsdis-amd64.so'yu Kenai'den indirdim: https://kenai.com/projects/base-hsdis/downloads

Bu kütüphaneyi kendim http://sourceforge.net/projects/fcml/files/fcml-1.1.1/ projesi ile oluşturdum.

Her yere koydum "google diyor":

/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/

isimleri ile:

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

Manuel olarak dışa aktarmayı bile ayarlamayı denedim LD_LIBRARY_PATH=/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/

... ve hepsi bir hiç için.

Artık Google sonucu yok, yukarıdaki çözümlerin kombinasyonu yok :-(

Biri bana yardım edebilir mi?

Yanıtlar:


10

İlk libhsdis0-fcmlönce diğer cevap 1'de açıklandığı gibi kurun :

sudo apt-get install libhsdis0-fcml

Bu sadece OpenJDK için kurar. Ancak, kullanıyorsunuz java-8-oracle, o yüzden orada kopyalamanız gerekir. İşte benim için çalışan tam copy komutu:

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

Bu hala çalışmıyorsa, stracenerede javabaktığınızı görmek için bir deneyebilirsiniz . Kullandım:

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

Bunun gibi çıktı almak için:

[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

Çalıştığınız yerlerin ve adların kesinlikle JDK aramaları arasında olduğunu görebilirsiniz (benim durumumda muhtemelen daha fazla yer aradı, ancak yukarıdaki son konum paylaşılan nesneyi bulduğundan beri durdu).

Asıl JVM'nin orijinal komutun alt süreci olarak başlatılmasından bu yana kesinlikle -fbayrağına ihtiyacınız olduğunu unutmayın .stracejava

Konular arasında straceortaya çıkabilecek bir izin sorunu var. Sadece kullanıcı başlatması için kütüphanede okuma izinlerine ihtiyacım vardı java.

Benim java -versionçıkışı:

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 Gerçekten de, bu (muhtemelen çalışır durumda) bir hsdis.sodosyayı paket yöneticisi dostu bir şekilde almanın bir yoludur. Her zaman sadece çeşitli kaynaklardan birinden doğrudan indirebilirsiniz.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.