Ich habe ein Java-Applet, mit dem ich auf lokalen Speicher im Remote-Server zugreifen kann. Es funktioniert gut unter Windows (IE 7.0.5730.13, Java SE 1.6.0.05). Nach Java Console lädt es die native Bibliothek für Java Native Interface:Java UnbefriedigterLinkError, während native Bibliothek gefunden wird
ClientInterface::downloadLib: downloaded C:\Documents and Settings\user\IBM\10.10.10.65\remotedrive3d.dll in 1 attempts.
Initializing RemoteDisk v2.2
..und ich bin in der Lage lokale Speichergeräte zuzugreifen:
unter Linux mit OpenJDK 1.8. 0_121 und IcedTea-Web 1.6.2 es lädt auch die native Bibliothek:
ClientInterface::downloadLib: downloaded /root/IBM/10.10.10.65/libibmxrdisk.so.1.0.3 in 1 attempts.
Es ist jedoch nicht mit einer UnsatisfiedLinkError
Fehlermeldung auszuführen:
Initializing RemoteDisk v2.2
OpenJDK 64-Bit Server VM warning: You have loaded library /root/IBM/10.10.10.65/libibmxrdisk.so.1.0.3 which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
java.lang.UnsatisfiedLinkError: VirtualDrive.PassThroughCommand.GetSupportedDevices()LVirtualDrive/SupportedDevices;
at VirtualDrive.PassThroughCommand.GetSupportedDevices(Native Method)
at com.ibm.asm.remotedisk.RemoteDisk.buildDriveList(Unknown Source)
at com.ibm.asm.remotedisk.RemoteDisk.start(Unknown Source)
at sun.applet.AppletPanel.run(AppletPanel.java:476)
at sun.applet.AppletViewerPanelAccess.run(AppletViewerPanelAccess.java:84)
at java.lang.Thread.run(Thread.java:745)
..und ich bin nicht in der Lage lokale Speichergeräte zuzugreifen:
Wenn ich die Firefox starten mit strace -f
, dann kann ich klar sehen, dass libibmxrdisk.so.1.0.3
Datei zugegriffen wird. Zum Beispiel:
[pid 6741] open("/root/IBM/10.10.10.65/libibmxrdisk.so.1.0.3", O_RDONLY|O_NONBLOCK) = 48
[pid 6741] read(48, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\334S\0\0004\0\0\0"..., 52) = 52
[pid 6741] close(48)
Diese /root/IBM/10.10.10.65/libibmxrdisk.so.1.0.3
scheint Strings wie GetSupportedDevices
zu enthalten:
[email protected]:~/IBM/10.10.10.65# strings libibmxrdisk.so.1.0.3 | grep -i GetSupportedDevices
Java_VirtualDrive_PassThroughCommand_GetSupportedDevices
GetSupportedDevices
Java_VirtualDrive_PassThroughCommand_GetSupportedDevices
[email protected]:~/IBM/10.10.10.65#
ist die proprietäre native Bibliothek libibmxrdisk.so.1.0.3
für Linux-Betriebssystem wahrscheinlich defekt? Ist es möglich, dass es nicht mit OpenJDK kompatibel ist? Wie debugge ich das weiter?
Was 'file sagen libibmxrdisk.so.1.0.3' nicht ITW? – omajid
Holen Sie sich eine Kopie von 'libibmxrdisk.so.1.0.3' und führen Sie' ldd' aus, um zu sehen, von welchen anderen Bibliotheken es abhängt. – alvits
Dies kann der Fall sein, falls die Bibliothek bereits von Ihrer Anwendung geladen wurde und die Anwendung versucht, sie erneut zu laden, wird der 'UnatisfiedLinkError' von der JVM ausgelöst, siehe https://examples.javacodegeeks.com/java-basics/exceptions/java-lang-unzufriedenerlinkerror-how-to-handle-unzufriedener-link-error/ –