2011-08-22 14 views
25

Biorę udział w tworzeniu projektu Java, który wykorzystuje niektóre składniki C++, a więc potrzebuję Jacob.dll. (Windows 7)Co to jest LD_LIBRARY_PATH i jak z niego korzystać?

ciśgle java.lang.UnsatisfiedLinkError: no JacobDB in java.library.path bez względu na to gdzie mogę umieścić Jacob.dll ....

Szukałem możliwych decyzji i tego, który nie próbowałem tak daleko jest ustawienie zmiennej LD_LIBRARY_PATH , wskazując na plik .dll.

Mam małe doświadczenie i nie jestem zaznajomiony z tym, co powinno być znaczeniem i użyciem tej zmiennej - czy możesz mi pomóc?

+0

Google: "java.library.path" ... kliknij dowolny link, który mówi o tym i dll ... – Nim

+1

i tutaj jest taki, który zrobiłem wcześniej: http://www.inonit.com/cygwin/jni/helloWorld/load.html – Nim

+0

Jeśli używasz okien i musisz załadować tę bibliotekę, użyj zmiennej systemowej "PATH" lub upuść bibliotekę dll w katalogu Windows/System32. LD_LIBRARY_PATH nie jest używane w oknach. –

Odpowiedz

24

Zazwyczaj należy ustawić java.library.path na linii poleceń JVM za:

java -Djava.library.path=/path/to/my/dll -cp /my/classpath/goes/here MainClass 
+0

To prawda! (+1) –

+0

mmm ... ale ... czym jest LD_LIBRARY_PATH? – JPCF

33

LD_LIBRARY_PATH to predefiniowana zmienna środowiskowa w systemie Linux/Unix, która określa ścieżkę, na którą linker powinien się odszukać podczas łączenia dynamicznych bibliotek/bibliotek współdzielonych.

LD_LIBRARY_PATH zawiera okrężnicy oddzielone listę ścieżek a łącznik zapewnia priorytet tych ścieżek, wzdłuż ścieżki standardowych biblioteki /lib i /usr/lib. Ścieżki standardowe będą nadal wyszukiwane, ale dopiero po wyczerpaniu listy ścieżek w LD_LIBRARY_PATH.

Najlepszym sposobem użycia LD_LIBRARY_PATH jest ustawienie go w wierszu polecenia lub skrypcie bezpośrednio przed wykonaniem programu. W ten sposób nowy LD_LIBRARY_PATH jest odizolowany od reszty systemu.

Przykład użycia:

$ export LD_LIBRARY_PATH="/list/of/library/paths:/another/path" 
$ ./program 

Skoro mówisz o .dll jesteś na systemie Windows i .dll musi być umieszczony na ścieżce, która wyszukuje łącznikowe w czasie łącza, w oknach ta ścieżka jest ustawiane przez zmienną środowiskową PATH, więc dodaj, że .dll do PATH i powinno działać dobrze.

7

LD_LIBRARY_PATH jest specyficzna dla systemu Linux i jest zmienną środowiskową wskazującą katalogi, w których program ładujący dynamiczny powinien szukać bibliotek współużytkowanych.

Spróbuj dodać katalog, w którym .dll jest w zmiennej PATH. Windows automatycznie zajrzy do listy katalogów w tej zmiennej środowiskowej. LD_LIBRARY_PATH prawdopodobnie nie rozwiąże problemu (chyba że JVM go używa - nie wiem o tym).

+0

Dziękuję, oczywiście, że to nie zadziała dla mnie. W przeciwnym razie dodanie elementu do zmiennej PATH było czymś, co zrobiłem na pierwszym miejscu ... bez powodzenia do tej pory :) – karla

+0

Nie jestem programistą Java, ale mógłbyś spróbować wydrukować zmienną java.library.path (z System. getProperty())? Możesz także spróbować ustawić tę zmienną za pomocą flagi linii poleceń -D podczas uruchamiania maszyny wirtualnej - ustawienie to może nawet działać w środowisku uruchomieniowym. Jeśli pracujesz w Eclipse imho, istnieje sposób na ustawienie "Native Library locations" w ustawieniu Build Path we właściwościach projektu. –

+2

Nie Linux !! Wszystkie Uniksy używają tej zmiennej środowiskowej! Również nie jest do łączenia, ale do ładowania! Biblioteki połączone statycznie są zwykle podawane w wierszu poleceń do łącznika, a dynamiczne ładowane są przeglądane przez LD_LIBRARY_PATH. Zobacz np. http://linuxmafia.com/faq/Admin/ld-lib-path.html –

1

Dobrze, komunikat o błędzie mówi, co należy zrobić: dodać ścieżkę, w której rezyduje do Jacob.dll java.library.path. Można to zrobić w linii poleceń jak poniżej:

java -Djava.library.path="dlls" ... 

(zakładając Jacob.dll jest w "DLL" folder)

zobaczyć również java.lang.UnsatisfiedLinkError no *****.dll in java.library.path

+3

Po uruchomieniu maszyny JVM nie można ustawić 'java.library.path' w ten sposób. –

Powiązane problemy