biblioteka z c w javie

0

Hej, mam problem z zaladowaniem i wykorzystaniem biblioteki ktora jest napisana w c(albo c++) dla javy. Jest to projekt do korzystnia z PGP w javie (http://www.iam.unibe.ch/~jampen/pgpjava/index.html). Napisane w pliku readme jest:

libpgpi.so
PGPi.class
and a valid pubring.pgp and secring.pgp in the same directory.

Na poczatku nie wiedzialam gdzie je zaladowac, ale tak jak znalazlam na tym forum, System.getProperty("java.library.path") pokazalo mi sciezke gdzie skopiowac. Wiec skopiowalam tam te 4 pliki.
Aplikacja jest typu WebApplication, uzywam netbeansa.
w testowej klasie napisalam:

public class Test {

    public native int decrypt();

    static{
        System.load("/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/i386/libpgpi.so");
    }

    public Test() {
    }

    public static void main(String[] args) {

    }
}

Po kompilacji juz sie nie wywala, co sugerowaloby ze jest ok. teraz chcialabym zaczac uzywac klas i metod z tej biblioteki (ladne api tutajhttp://www.iam.unibe.ch/~jampen/pgpjava/PGPi.html ale po prostu nie wiem jak. Jak utworzyc teraz obiek PGPi? czy ja ta biblioteke zaladowalam do odpowiedniej sciezki?

bede wdzieczna za wszelkie wskazowki,
pzdr,
misty

0

Z API wynika ze ta klasa ma 2 konstruktory ktore mozesz uzyc.

0

nie no o to chodzi.

Ja nie moge skorzystac z tego. Proba utworzenia obiektu typu PGPi:

PGPi p = new PGPi();

daje 'cannot find symbol', on nie widzi tej biblioteki. czy zaladowanie poprzez:

    static{
        System.load("/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/i386/libpgpi.so");
    }

wystarczy? widocznie nie skoro nie moge tworzyc obiektow tej biblioteki i korzystac z zawartych tam metod

0

Czytam troche o JNI i chyba tego bede musla uzyc.
Utworzylam klase PGPi, a w niej:

public class PGPi {

public native int addPubKey(String s);

    static{
        System.load("/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/i386/libpgpi.so");
    }
}

zeby moc skorzystac z metody addPubKey(String s) - o ile dobrze zrozumialam ze tak sie z tego skorzysta. i pozniej w moim pliku glownym, w main:

    PGPi p = new PGPi();
    int t = p.addPubKey("test");
   System.out.println(t);

Po kompilacji jednak dostaje:
# A fatal error has been detected by the Java Runtime Environment:

SIGSEGV (0xb) at pc=0xb6f1a329, pid=2938, tid=3065482096

Jestem pewna ze zle laduje te pliki, nie w tym miejscu albo cos. Czy ktos z Was moglby mi podpowiedziec gdzie mam je wrzucic?

0

Przecież w tej paczce:
http://www.iam.unibe.ch/~jampen/pgpjava/pgpjava.zip
masz kod źródłowy PGPi.java. Wystarczy to dodać do projektu żeby móc tego używać.

0

ale gdzie skopiowac plik libpgpi.so??

0

jak dodaje do PGPi.java:

         static{
      System.load("/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/i386/libpgpi.so");
   }

a pozniej w Main:

    public static void main(String[] args) {
 
        PGPi p = new PGPi();
        p.keyMaint();
        int t = p.addPubKey("test");
        
    }

to dostaje:
Exception in thread "main" java.lang.UnsatisfiedLinkError: javaapplication11.PGPi.keyMaint()I
at javaapplication11.PGPi.keyMaint(Native Method)
at javaapplication11.Main.main(Main.java:23)
Java Result: 1

gdzie i jak ja mam to libpgpi.so zaladowac??

0

czytalam juz ten watek co mi podales:

Właśnie przetestowałem i sprawa wygląda tak:
System.loadLibrary(...) zadziała pod warunkiem ze dołączona biblioteka:
a) nie ma zaleznosci innych niż systemowe
b) wszystkie zaleznosci niesystemowe sa w pliku .jar

nie kumam tego.
poza tym
a) kopiuje biblioteke do library.path
b)podaje pelna sciezke/niepelna - nie dziala i tak i tak

jak to zaladowac? ://

1 użytkowników online, w tym zalogowanych: 0, gości: 1