/ / Relacje między plikami wykonywalnymi, bibliotekami statycznymi i bibliotekami współdzielonymi - c ++, c, biblioteki współdzielone, biblioteki statyczne

Relacje między plikami wykonywalnymi, bibliotekami statycznymi i bibliotekami współdzielonymi - c ++, c, biblioteki współdzielone, biblioteki statyczne

Piszę system kompilacji dla projektu i nie jestem pewien, jakie są powiązania między plikami wykonywalnymi, bibliotekami statycznymi i bibliotekami współdzielonymi.

Dla mnie są trzy afirmacje:

  • Plik wykonywalny może korzystać zarówno z bibliotek statycznych, jak i współdzielonych.
  • Biblioteka statyczna może korzystać zarówno z bibliotek statycznych, jak i współdzielonych.
  • Biblioteka współdzielona może korzystać tylko z bibliotek statycznych.

Nadal mam wątpliwości co do trzeciej afirmacji ...

Czy możesz mnie o tym oświecić?

Odpowiedzi:

5 dla odpowiedzi № 1

Aby użyć biblioteki statycznej, w zasadzie przypomina linkowanie .o lub .obj plik: wszystkie implementacje powiązane z aplikacją lub biblioteką w danym momencie. Zmiany wprowadzone w bibliotece statycznej po tym czasie nie będą automatycznie wychwytywane przez kod, który ją połączył ... ta ostatnia musiałaby być ponownie połączono, aby wprowadzić zmiany.

Biblioteki udostępnione odraczają łączenie do czasu wykonania,co oznacza, że ​​za każdym razem, gdy kod korzystający z biblioteki współużytkowanej wywołuje jakąś funkcjonalność, wykorzystywana jest wersja biblioteki współużytkowanej znaleziona w czasie wykonywania. Dopóki zmiany nie wpływają na publiczny interfejs API, możesz zastąpić bibliotekę współdzieloną, a aplikacje, które ją znajdą w czasie wykonywania, będą pobierać aktualizacje / zmiany bez konieczności ich modyfikacji / ponownego łączenia.

Tak, tak, plik wykonywalny może używać obu, biblioteka statyczna może używać zarówno, jak i twojego trzecie „afirmacja” jest błędna: biblioteka współdzielona może również korzystać z obu. Oznacza to po prostu, że sama biblioteka współdzielona może korzystać z migawki funkcji z biblioteki statycznej lub może znaleźć inne funkcje z innej biblioteki współdzielonej w czasie wykonywania.