Warum erhalte ich diesen UnbefriedigtenLinkError mit nativem Code?

7

Ich habe eine Bibliothek namens HelloWorld.so und ein Programm HelloWorld.java mit diesem Inhalt:

%Vor%

Wenn ich jetzt versuche, HelloWorld.java auszuführen, erhalte ich folgende Fehlermeldung:

%Vor%

Irgendwelche Tipps?

    
KNewton 17.04.2009, 18:28
quelle

4 Antworten

0

@mmyers Vielen Dank für Ihre Antwort. Wir fanden heraus, dass wir nur System.loadLibrary in System.load ändern mussten und den vollständigen Pfad + Dateiname als Argument übergeben mussten, was wie ein Zauber wirkte.

Schon vorher haben wir versucht, den Parameter "-D" zu verwenden und LD_LIBRARY_PATH zu setzen, aber wir waren nicht erfolgreich.

Geh Figur! :)

Nochmals vielen Dank, Karen

    
KNewton 20.04.2009, 16:26
quelle
11

Ich denke, einige Punkte sind hilfreich, wenn Sie diesen Fehler erhalten:

  1. Überprüfen Sie die Konsistenz des Funktionsnamens in .c-Dateien und generierten Dateien ( .h)
  2. Name der jni-Bibliothek basierend auf dem Betriebssystem. Beispiel: In HelloWorld.java, System.loadLibrary("HelloWorld");
    • Solaris: libHelloWorld.so
    • Linux: libHelloWorld.so
    • Gewinn: HelloWorld.dll
    • Mac: libHelloWorld.jnilib
  3. Wenn Sie fortfahren, fügen Sie -Djava.library.path=PATH hinzu. PATH , wo Sie Ihre jni-Bibliothek platzieren

Hier ist meine Referenz: Ссылка

    
Gonnix 09.12.2013 10:11
quelle
9

Ich hatte dieses Problem und reparierte es, indem ich meine Bibliothek in libHelloWorld.so umbenannte und Michael Myers Vorschlag folgte. Ich bin auf Arch Linux 64-Bit.

HelloWorld.c :

%Vor%

HelloWorld.java :

%Vor%

Bauen und Testen:

%Vor%

tl; dr: Setzen Sie lib am Anfang des Dateinamens der Bibliothek

    
Austin Adams 09.07.2013 22:08
quelle
7

Wo befindet sich HelloWorld.so? Wahrscheinlich müssen Sie das übergeordnete Verzeichnis mit dem Befehlszeilenparameter "-Djava.library.path" angeben.

Wenn es beispielsweise in "/path/libs/HelloWorld.so" ist, fügen Sie -Djava.library.path=/path/libs als Option hinzu, wenn java aufgerufen wird. Zum Beispiel ist es "-Djava.library.path=lib" in einem meiner Projekte.

Bearbeiten: Dan Dyer weist darauf hin, dass auch die Umgebungsvariable LD_LIBRARY_PATH dafür verwendet werden kann.

    
Michael Myers 17.04.2009 18:29
quelle

Tags und Links