Aplikacja C ++ - czy powinienem używać linków statycznych lub dynamicznych dla bibliotek?

Zamierzam rozpocząć nowy projekt C ++, który będzie polegał na szeregu bibliotek, w tym na bibliotekach Boost, log4cxx lub bibliotece logowania Google - a ponieważ projekt rozwija się także w innych (których nie mogę jeszcze przewidzieć) .

Będzie musiał działać zarówno na systemach 32-bitowych, jak i 64-bitowych, najprawdopodobniej w dość zróżnicowanym środowisku Linux, w którym nie oczekuję, że wszystkie wymagane biblioteki będą dostępne, ani su przywileje.

Moje pytanie brzmi: czy powinienem budować swoją aplikację, dynamicznie lub statycznie łącząc się ze wszystkimi tymi bibliotekami?

Uwagi:

(1) Zdaję sobie sprawę, że statyczne powiązanie może być bólem podczas rozwoju (dłuższe czasy kompilacji, kompilacja krzyżowa zarówno dla 32, jak i 64 bitów, zejście z łańcuchów zależności w celu uwzględnienia wszystkich bibliotek itp.), Ale jest dużo łatwiejsze podczas testowania - po prostu przenieś plik i uruchom.

(2) Z drugiej strony, dynamiczne łączenie szwów jest łatwiejsze w fazie rozwoju - krótkie czasy kompilacji (nie wiem, jak radzić sobie z dynamicznym linkowaniem do 64-bitowych bibliotek z mojego 32-bitowego środowiska dev), bez zgiełku z łańcuchami zależności. Wdrażanie nowych wersji z drugiej strony może być brzydkie - zwłaszcza, gdy wymagane są nowe biblioteki (patrz warunek powyżej, że nie mamy żadnych uprawnień do docelowych komputerów, ani tych bibliotek dostępnych).

(3) Przeczytałem pytania związane z tym tematem, ale nie mogłem ustalić, które podejście najlepiej pasuje do mojego scenariusza.

Wnioski:

Dziękuję wszystkim za wkład!Prawdopodobnie skorzystam z linków statycznych, ponieważ:Łatwiejsze wdrażaniePrzewidywalna wydajność i bardziej spójne wyniki podczas perf. testowanie (patrz ten artykuł: http://www.inf.usi.ch/faculty/hauswirth/publications/CU-CS-1042-08.pdf)Jak wskazano, rozmiar i czas trwania kompilacji statycznej vs. dynamicznej nie wydaje się być tak dużą różnicąŁatwiejsze i szybsze cykle testoweMogę zatrzymać wszystkie dev. cykl na moim dev. maszyna

questionAnswers(4)

yourAnswerToTheQuestion