2009-08-20 14 views
6

Muszę połączyć mój kod z biblioteką współdzieloną bez prefiksu lib. (powiedzmy, foo.so) Pierwszy problem to -l opcja nie znajduje pliku. Dlatego starałem się bezpośrednio tym ten plik do ostatniej kompilacji jak ten:Jak utworzyć łącze do biblioteki współdzielonej bez prefiksu lib * w innym katalogu?

gcc ao /PATH/TO/FOO/foo.so

Ale w tym przypadku trudno jest związana foo.so jako ścieżka bezwzględna jak widać w „ldd a”:

/PATH/TO/FOO/foo.so

w ostatecznym wdrożeniem oba pliki by skończyć się w tym samym folderze, więc to powinno być normalne link nie absolutna ścieżka. Jak mogę to zrobić?

+0

Możliwy duplikat [Jak połączyć za pomocą GCC bez -l ani ścieżka hardcoding do biblioteki, która nie jest zgodna z konwencją nazewnictwa libNAME.so?] (http://stackoverflow.com/questions/207069/how-to-link-using-gcc-without-l-nor-hardcoding-path- for-a-library-that-does-not) –

Odpowiedz

6

-Wl, -rpath ,. -> aby użyć bieżącego katalogu do wyszukiwania plików lib. (nawet jeśli nie znaleziono go w kompilacji, ok w czasie wykonywania) zamiast -library -> użyj biblioteki.so.

To wydaje się działać poprawnie. Mam nadzieję, że ktokolwiek uzna to za przydatne.

12

Zakładając platformy ELF, czy można odbudować foo.so:
- najlepszym rozwiązaniem jest po prostu nazwać to libfoo.so
- obok najlepszych rozwiązaniem jest ustawienie SONAME na nim:

gcc -Wl,-soname,foo.so -o foo.so foo.o 

kiedy później związek z: tylko

gcc -o a.out a.o /path/to/foo.so 

SONAME będą rejestrowane jako zależność, a nie pełny /path/to/foo.so.

Jeśli nie można odbudować foo.so, to zrobić:

rm -f foo.so && ln -s /path/to/foo.so foo.so && 
    gcc -o a.out a.o ./foo.so && rm -f foo.so 
Powiązane problemy