Native Bilbiothek exportieren

lyrichter

Mitglied
Hallo liebes Java-Forum,

ich möchte ein Projekt, dass ich unter Windows mit Eclipse erstellt habe, so in eine jar-Datei exportieren, dass diese auf anderen Rechnern, auch unter MAC-OS und Linux, läuft. Dabei machen mir die nativen Bibliotheken des eingebunden RXTX Probleme.

Im Detail:
Ich arbeite an einem Projekt, das für Hardwarekommunikation über einen Comm-Port die RXTX-Bilbiothek verwendet. Das Projekt läuft auf meinem Rechner wunderbar, die Bilbiothek habe ich mit Eclipse wie folgt eingebunden:
1.) Properties -> Java Build Path -> Add JARs --> RXTXcomm.jar
2.) RXTXcomm -> Native Libraries -> Edit -> [Verzeichnis mit 2 dll-Dateien]
Wenn ich mich nicht täusche, dann setzt Eclipse nun java.library.path so, dass die nativen Bilbiotheken gefunden werden. Jedenfalls funktioniert in Eclipse alles wunderbar.

Wenn ich das Projekt aber in eine ausführbare jar-Datei exportiere und die Option "Extract required libraries into generate JAR" wähle, werden die dll-Dateien nicht mitgepackt. Ich kann die dll-Dateien per Hand in dasselbe Verzeichnis wie das jar-Archiv kopieren, dann funktioniert alles unter Windows.
Um das Programm auch auf anderen Betriebssystemen zum Laufen zu bringen, benötige ich ja einfach die entsprechenden nativen Dateien. Die habe ich auch, allerdings haben sie teilweise den gleichen Namen, das heißt, ich kann sie leider nicht alle in das gleiche Verzeichnis legen. Außerdem ist es nicht sehr übersichtlich, dieses Verzeichnis mit unzähligen Dateien für verschiedene Betriebssysteme vollzupacken.

Gibt es da eventuell elegantere Lösungen?

Viele Grüße,
lyrichter
 
G

Gast2

Gast
Außerdem ist es nicht sehr übersichtlich, dieses Verzeichnis mit unzähligen Dateien für verschiedene Betriebssysteme vollzupacken.
Du kannst doch entweder für jede Plattform einen eigenen Ordner erstellen und dort dann die entsprechenden Dateien sammeln. Oder du lieferst nur die benötigten Dateien aus. Was will ein unix system mit windows DLLs anfangen?

Im entsprechenden Startskript kannst du dann den library path so setzen dass die richtigen Dateien geladen werden.
 

U2nt

Bekanntes Mitglied
Also ich würde einfach verschiedene Versionen für verschiedene Betriebsysteme anbieten, eine für Windows mit den Windows natives gepackt, eine für Linux ...
 

lyrichter

Mitglied
Hallo, erstmal danke für die Antworten.

Ich muss allerdings leider erst mal etwas zurückrudern:
Um das Programm auch auf anderen Betriebssystemen zum Laufen zu bringen, benötige ich ja einfach die entsprechenden nativen Dateien.
Ich habe die jar-Datei auf meinen Linux-Rechner geladen und die Datei librxtxSerial.so in das gleiche Verzeichnis gelegt. Beim Ausführen des Programmes erscheint aber immer noch folgende Fehlermeldung:
Code:
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
Exception in thread "Thread-2" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path"

Dann habe ich mir java.library.path auf Linux ausgeben lassen und war etwas überrascht: Das Verzeichnis, aus dem die jar-Datei ausgeführt wird, ist gar nicht aufgeführt. Ist das ein Ausnahmefall bei meiner Linux-Distribution oder sollte man sich prinzipiell nicht darauf verlassen?
Was wäre die ebste Vorgehensweise, um das Problem zu umgehen? Ein Startscript, das den Pfad einfach entsprechend setzt?
 
G

Gast2

Gast
Wie in dem verlinkten Thread geschrieben, finde ich es auch schade, dass man den Java Library Path wohl nicht übers Manifest setzen kann. Somit degradiert man eine executable jar doch zum Start über ein Script.

[EDIT]Ich mache den gesamt Build übrigens mittels eines einfachen ant scripts, welches 2 distris erstellt. Einmal mit den Windows und einmal mit den Linux natives. In der Windows version wird dann noch alles mit Launch4j gewrappt und in ner Setup.exe mittels InnoSetup Compiler gepackt. Unter Linux wirds ein einfaches tgz[/EDIT]
 
M

maki

Gast
Mit OSGi geht das auch "schöner", aber ein Starterskript ist keine so schlechte Sache wie man anfangs meint ;)
Jars können neben nicht den Java Library Path setzen, genausowenig wie Speicherparameter etc. pp.
 
G

Gast2

Gast
Ich war eben auch verwirrt, da es unter Windows tatsächlich nicht notwendig ist den JavaLibraryPath zu setzen, solange die dll's neben der Jar liegen.
 

lyrichter

Mitglied
Wohl ein "schmutziger" Workaround - ich habe es nicht getestet, aber vielleicht interessiert es jemand, der hier sucht.
Andere waren offensichtlich schon sehr glücklich damit - Zitat aus den Kommentaren: Oh My god, I can’t believe it worked. I have been looking for something like this for the past two months. I almost cried when it worked.:)

Java:
System.setProperty( "java.library.path", "/path/to/libs" );
 
Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null );

Quelle und nähere Erläuterung:
Setting "java.library.path" programmatically | Just Java
 
Zuletzt bearbeitet:
T

tuxedo

Gast
Wenn ich mich nicht irre kann man auch mit System.load() (oder wars System.loadLibrary() die Bibliothek "manuell" laden und den ganzen Pfad mit angeben. Dann ist der "java.library.path" Suchpfad quasi egal...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
RalleYTN Classpath Native Dateien(DLL, SO, JNILIB) Allgemeine Java-Themen 2
A Linux: Native Library mit Rootrechten ohne Prozess mit sudo zu starten Allgemeine Java-Themen 1
F Java Native/Shared Library (.so) laden macht Probleme Allgemeine Java-Themen 3
reibi JNA - Native Acess - Library Path Allgemeine Java-Themen 2
G Native Library / Fehler beim Laden der .so/.dll Datei Allgemeine Java-Themen 17
W Java Native Interface und "mp3player" Allgemeine Java-Themen 3
P Eclipse Java Native Interface-Problem Allgemeine Java-Themen 8
G RXTX native library unter Linux in jar build angeben Allgemeine Java-Themen 4
G Webstart Java Web Start und native Bibliotheken Allgemeine Java-Themen 3
KrokoDiehl JNI: native im Interface Allgemeine Java-Themen 4
KrokoDiehl thread-unsichere, native Bibliotheken Allgemeine Java-Themen 11
M Java Web Start - Native DLL einbinden Allgemeine Java-Themen 2
M Java native C# Allgemeine Java-Themen 2
F GCJ bzw. native Java-Programme Allgemeine Java-Themen 7
T Native Library ausliefern Allgemeine Java-Themen 12
J Native Library einbinden Allgemeine Java-Themen 17
B Native DLL zweimal laden: System.load(sPath); Allgemeine Java-Themen 5
S native methoden in try / catch ? Allgemeine Java-Themen 3
L Native Threads unter Linux? Allgemeine Java-Themen 2
G Java-Befehle Native und Static Allgemeine Java-Themen 2
minzel Java Native Interface Allgemeine Java-Themen 9
M unable to create new native thread Allgemeine Java-Themen 6
S komplett in native kompilieren Allgemeine Java-Themen 6
G jar archiv und native klassen (pfad angabe) Allgemeine Java-Themen 2
C Java Native binding Code will nicht so ganz Allgemeine Java-Themen 2
M Threads (Native oder Green) Allgemeine Java-Themen 2
D unable to create new native thread Allgemeine Java-Themen 1
G JavaFX Maven Projekt als .exe Datei exportieren Allgemeine Java-Themen 10
I HTML / XHTML Seite nach Excel exportieren. Suche Lib Allgemeine Java-Themen 12
M Java Eclipse- Datei exportieren Allgemeine Java-Themen 5
C Eclipse OutOfMemory nach dem exportieren Allgemeine Java-Themen 4
F Datei aus Jar exportieren Allgemeine Java-Themen 2
N Facebook Kontakte exportieren Allgemeine Java-Themen 5
P wieso kann ich auf bluej exportieren aber auf eclipse nicht? Allgemeine Java-Themen 2
C Eclipse Icons(PNG) mit in das ausführbare Jar File exportieren Allgemeine Java-Themen 7
T Input/Output Zeilenumbrüche beim exportieren in eine Textfile Allgemeine Java-Themen 7
M pdf nach xls, csv und txt exportieren Allgemeine Java-Themen 4
F Xml-datei zu Excel exportieren Allgemeine Java-Themen 5
N Als *.esp (Elder Scrolls Plugin) exportieren Allgemeine Java-Themen 12
S Problem bei exportieren der *.jar datei Allgemeine Java-Themen 16
G Daten nach Word exportieren Allgemeine Java-Themen 2
S exportieren Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben