DLL oder .so Datei im JAR laden

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • DLL oder .so Datei im JAR laden

    Hallo,

    ich muss für ein Projekt einige nativen Methoden die mit C geschrieben sind in Java ausführen.

    Die Sache ist, das Projekt soll später einfach über eine Jar gestartet werden können und funktionieren.

    Ich habe mich bisschen informiert aber ich finde nicht so wirklich hilfreiches :(. Mein Problem besteht darin das ich nicht so wirklich weiß oder es auch nicht funktioniert was ich bisher mache um die DLL im Jar zu laden.

    Ich benutzt Eclipse als IDE für Java (leider :D) und dort habe ich im Projektordner meine dll Datei reingefügt. Allerdings rufe ich über System.load(Klasse.class.getResource...) die dll auf und deswegen muss die auch im bin Ordner sein =/.
    Da ist schon das erste Problem - zum exportieren muss die im Projektordner und zum laden und starten (IN Eclipse) im /bin Ordner.

    Wenn ich das Projekt nun als Jar exportiere ist meine dll Datei im Hauptordner drin. Aber wie kann ich diese dll nun IM JAR aufrufen?
  • Hallo,

    danke für die Antwort! Ja, so in der Art habe ich das auch gelesen und inzwischen es hinbekommen die DLL zu extrahieren (über Input / Output Stream) und dann im getproperty(user.home) Verzeichnis ablege. Danke!

    Das selbe Problem dass das System auf die Jar nicht zugreifen kann ist aber unter Linux auch so oder?

    Wär über weitere Infos oder Ideen/Techniken darüber noch dankbar!

    EDIT: Noch schnell die Frage: Welcher Pfad ist die Startposition für System.load()? Also wenn ich da was angebe wie z.B. test.dll - sucht der das in dem Ordner wo die Jar ausgeführt wird?

    The post was edited 1 time, last by Illidan ().

  • Hi,

    Ich gehe davon aus, dass es sich unter Linux genau so verhält, ohne es probiert zu haben.

    Wenn ich die Doku zu System.load richtig verstehe, dann muss immer ein kompletter Pfad angegeben werden, relative Pfade gehen also nicht, womit sich deine Frage zu Startposition erledigt hat.

    download.oracle.com/javase/6/d…oad%28java.lang.String%29

    Loads a code file with the specified filename from the local file system as a dynamic library. The filename argument must be a *complete* path name.



    mfg
    ButAlive
  • Okay, dankeschön!

    Jetzt ist nur noch die Frage ob ich die Dateien (also die Libraries und XML Dateien die ich noch erstelle und lese/editiere) in dem Verzeichnis anlege wo die Jar sich befindet oder im user.home Verzeichnis =/. Bei user.home habe ich doch eigentlich die Sicherheit das es auf jeden Fall funktioniert weil der Benutzer immer Schreibzugriffe dadrauf hat? Das wäre doch dann die bessere Methode?
  • Hallo,

    ich verlier langsam die Nerven bei Java mit Dateiorten und sonst was :(.

    Ich bin jetzt doch _diesmal_ umgestiegen das ich die native libs direkt neben dem Jar entpacke.

    Leider kriege ich das gar nicht so genau hin wie ich das haben will und sogar zweifel ich daran das ich das gescheit mache da es teilweise gar nichts bringt irgendwie....

    Ich hab einmal mein Projektordner mit XML Dateien, src, bin, native_libs. Dann will ich später meine Jar Datei erstellen, die beim Start die jeweilige Library aus "native_libs" entpacken soll.

    Das Problem ist jetzt: Wenn ich mein Projekt so starte entpackt der mir den kram erstmal direkt in ./ (vom Projektordner) und auf diese greift er dann auch zu (im Programm dann). Das ist ja dann eigentlich redundant da ich die einmal im ./-Wurzel habe und in native_libs?? Der Sinn mit dem extrahieren war ja nur bei dem Jar, gibts da irgendeine saubere Lösung :(?

    Und zweitens: Ich versage irgendwie einfach an den Zugriff von Dateien, oder das Ausgeben des aktuellen Verzeichnis....mit Datei.class.getClassLoader.getResourceAsStream() befindet er sich doch in ./bin-Ordner? Wie kann ich jetzt ins ./ kommen? In einem Forum habe ich es mittels "new File("").getAbsolutePath()+"datei" - aber so sauber ist es ja auch wieder nicht :(.

    Und dann kommt das Problem halt mit dem System.load() - hier brauche ich ja den Absoluten Pfad zur Datei.

    Kann mir da einer helfen :(?