2013-01-06 5 views
5

mogę z powodzeniem połączyć przeciwko libawesomium-1.6.5.so:Łączenie przeciwko Shared Library, nazywając program bez niestandardowego LD_LIBRARY_PATH

-L-L. 
-L-lawesomium-1.6.5 
-L-ldl 

libawesomium-1.6.5.so jest w tym samym katalogu, co moim pliku wykonywalnego, teraz gdy próbuję zadzwonić do mojego programu (Zadzwonię to prog do tej pory), to istnieje z:

./prog: error while loading shared libraries: libawesomium-1.6.5.so.0: cannot open shared object file: No such file or directory 

Więc robię dowiązaniem libawesomium-1.6.5.so.0 wskazując libawesomium-1.6.5.so, bieganie prog znowu daje mi ten sam błąd, nazywając go ze zwyczajem LD_LIBRARY_PATH=./ działa, ale chcę rozpowszechniać prog i chcę, aby użytkownik mógł używać prog bez praw administratora (instalując awesomium na /usr/lib itp.) I bez potrzeby ustawiania LD_LIBRARY_PATH. Jedną opcją byłby skrypt powłoki, który ustawia LD_LIBRARY_PATH, ale wolałbym inny sposób (ja też słyszałem ustawienie LD_LIBRARY_PATH jest złym pomysłem).

Co więcej, byłoby świetnie, gdyby nie było potrzeby tworzenia dowiązania symbolicznego do libawesomium-1.6.5.so.0.

EDIT:

Przechodząc -rpath=. do prac łącznikowych! Ale niestety awesomium nie może sobie z tym poradzić:

/.../awesomium_test/AwesomiumProcess: error while loading shared libraries: libawesomium-1.6.5.so.0: cannot open shared object file: No such file or directory 

Korzystanie -rpath i ustawienie LD_LIBRARY_PATH od wewnątrz prog działa

Odpowiedz

6

Jeśli używasz gcc, możesz przekazać -Wl,-rpath=lib_directory, aby plik wykonywalny przeszukał biblioteki w katalogu lib_directory.

Co więcej, ten argument przyjmuje specjalną wartość $ORIGIN, która reprezentuje katalog zawierający wykonany program. Jeśli więc przekażesz -Wl,-rpath='$ORIGIN' do gcc, będziesz w stanie przechowywać libawesomium-1.6.5.so w tym samym katalogu, co program.

+0

Wow to działa, dziękuję! No cóż, niezupełnie, zobacz moją edycję. – dav1d

+0

Rozgryzłem to! Mogę ustawić 'LD_LIBRARY_PATH' przed załadowaniem awesomium do mojego programu. – dav1d

+0

Powinieneś przekazać '-Wl, -rpath = '$ ORIGIN'' zamiast' -Wl, -rpath = .' i LI_LIBRARY_PATH będą bezużyteczne. – Julien

1

błąd jest bo. nie jest na twojej drodze. Twoje opcje polegają na dystrybucji skryptu bash, który uruchamia plik binarny z zestawem LD_LIBRARY_PATH, jak mówisz, lub kopiowania obiektu współużytkowanego do/usr/lib lub/usr/local/lib lub gdziekolwiek jest to odpowiednie na tej konkretnej platformie.

Nie ma naprawdę skrótu, chyba że chcesz połączyć statycznie.

+0

Tak, chciałem uniknąć obu sposobów. Dziękuję za wyjaśnienie, że nie ma innej drogi. Statycznie linkowanie nie działa, ponieważ nie ma statycznej biblioteki dla awesomium (zamknięte źródło, tylko .to jest dostarczane) – dav1d

Powiązane problemy