2011-06-29 12 views
5

Napotkałem kilka przypadków projektów budowlanych, które korzystają z bibliotek współdzielonych lub modułów ładowanych dynamicznie, gdzie moduł/biblioteka zależy od innej biblioteki, ale nie sprawdza, czy udostępniona kopia jest dostępna przed próbą połączenia. Powoduje to, że pliki obiektów z archiwum statycznego (plik .a) zostaną przyciągnięte do wynikowego .so, a ponieważ te pliki obiektów nie są PIC, wynikowy plik .so ma TEKSTRYNY (bardzo złe obciążenie i wykorzystanie pamięci) lub całkowicie się nie powiedzie (na archsach takich jak x86_64, które nie obsługują bibliotek współużytkowanych PIC).Czy mogę, aby gcc ignorowało statyczne biblioteki podczas łączenia bibliotek współdzielonych?

Czy jest jakiś sposób, aby sterownik kompilatora gcc odmówił połączenia kodu biblioteki statycznej z udostępnianą biblioteką współdzieloną? Wydaje się to trudne i skomplikowane przez ewentualną potrzebę łączenia minimalnych ilości z libgcc.a i tym podobnych ...

Odpowiedz

1

Jak wiadomo, można użyć opcji -static, aby tylko łączyć się z bibliotekami statycznymi, ale nie wydaje się, aby być dobrym odpowiednikiem łączenia tylko z bibliotekami dynamicznymi.

Poniższa odpowiedź może być przydatny ...

How to link using GCC without -l nor hardcoding path for a library that does not follow the libNAME.so naming convention?

Można użyć -l: [libraryname] .so notować dynamicznych bibliotek, które chcesz połączyć przeciwko w ścieżce wyszukiwania w bibliotece. Określenie końcówki .so prawdopodobnie pomoże w przypadku twojej biblioteki dynamicznej. Prawdopodobnie będziesz musiał podać całą nazwę z prefiksem "lib" zamiast tylko skróconej wersji.

Powiązane problemy