2011-01-11 15 views
2

Ich versuche, ein Programm einzurichten, das Java und OpenCL verwendet. Ich verwende JOCLs Bindungen dafür. Hier ist der Fehler, den ich bekomme, wenn ich von Ant bauen:java.lang.UnsatisfiedLinkError, ich kann es nicht lösen

Error while loading native library "JOCL-linux-x86_64" with base name "JOCL" 
Operating system name: Linux 
Architecture   : amd64 
Architecture bit size: 64 
Stack trace: 
java.lang.UnsatisfiedLinkError: no JOCL-linux-x86_64 in java.library.path 
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734) 
    at java.lang.Runtime.loadLibrary0(Runtime.java:823) 
    ... 
    ... 

Hier ist mein Bashrc Setup:

export PATH=.:/bin:/usr/bin:/usr/local/bin://home/djkashta/Desktop/bp-trunk/app/BlueprintCore/scripts:/usr/java/jdk1.6.0_23/bin

export LD_LIBRARY_PATH=/usr/local/cuda/lib:/usr/local/cuda/lib64:/usr/lib:/usr/local/lib:/usr/local/cuda/computeprof/bin:/home/djkashta/Desktop/bp-trunk/bundles/CopperShark/native/linux/2.6.28/x86_64/:/usr/java:/usr/java/jdk1.6.0_23/bin/java:/usr/java/jdk1.6.0_23:/usr/java/jdk1.6.0_23/bin:/usr/lib/jvm

export LD_PRELOAD=/usr/java/jdk1.6.0_23/jre/lib/amd64/libjsig.so

export JDK_HOME=/usr/java/jdk1.6.0_23

export JAVA_HOME=/usr/java/jdk1.6.0_23 export ANT_HOME=/opt/apache-ant-1.7.1

Ich verstehe nicht, warum ich dieses Problem habe. Ich bekomme das nicht auf meinem Ubuntu-Rechner, der genau wie dieser RedHat-Rechner eingerichtet ist. Das libJOCL-linux-x86_64.so ist in einem der LD_LIBRARY_PATH vorhanden. Wenn ich welches Java mache, bekomme ich: /usr/java/jdk1.6.0_23/bin/java

Irgendwelche Ideen? Ich stecke ...

+1

Als Hinweis zu $ ​​LD_LIBRARY_PATH bevorzuge ich es immer, eine Datei in /etc/ld.so.conf.d hinzuzufügen und dann 'ldconfig' auszuführen. – trojanfoe

+0

Was wird angezeigt, wenn Sie 'System.getProperty (" java.library.path ")' vor dem Laden der Bibliothek drucken? – gabuzo

+0

Ich bekomme etwas, was ich nicht erwartet habe, ein Verzeichnis in meiner Anwendung. Irgendein Code oder einige Projekteinstellungen, die ich nicht kenne, setze es vermutlich zu, was es ist: java.library.path:/home//Schreibtisch/bp-trunk/app/BlueprintCore/nativelib – smuggledPancakes

Antwort

3

LD_LIBRARY_PATH und java.library.path sind nicht gleich, obwohl sie ähnlich sind. Setzen Sie in der Befehlszeile -Djava.library.path auf den Ort, an dem sich Ihre Bibliothek befindet.

oder sogar - System.out.println (System.getProperty ("java.library.path")) kurz vor dem Laden die Bibliothek - um zu sehen, wie der Pfad aussieht ...

+0

Dank für das Vorschlagen, ein System zu tun. out.println (System.getProperty ("java.library.path")). Ich wusste nicht, dass meine Anwendung an einem anderen Ort nach meinen eigenen Bibliotheken suchte. Jetzt ist der Fehler weg! Nochmals vielen Dank :) – smuggledPancakes

+0

Kein Problem - BTW - der Unterschied zwischen LD_LIBRARY_PATH und java.library.path ist am offensichtlichsten, wenn die Bibliothek, die Java lädt, einige abhängige Bibliotheken hat, die wiederum geladen werden müssen. Der java.library.path hat keine Auswirkungen. Denken Sie daran, dass Sie die Bibliothek immer manuell von einem expliziten Ort aus laden können (aber das ist am besten für komplexere Anwendungsfälle reserviert) – time4tea

+1

Verzeihen Sie meine Ignoranz, aber könnte mir jemand erklären, wie genau das Problem damals gelöst wurde, dh was hinzugefügt werden sollte java.library.path, damit es funktioniert? JOCL enthält nur eine JAR-Datei, die wahrscheinlich diese Bibliotheken irgendwo tief im Inneren enthält, aber es ist mir überhaupt nicht klar, welchen Pfad ich dann liefern soll. – user1111929

Verwandte Themen