Używam biblioteki Boost w systemie Linux, GCC. Po zainstalowaniu i zbudowaniu Boosta odkryłem, że programy używające Regex i Thread korzystają z bibliotek Boost. Do moich celów potrzebuję statycznego linkowania. Jak zmienić typ połączenia? Czy powinienem odbudować Boost, czy może mogę ustawić typ łączenia przez zdefiniowanie stałej w moich własnych projektach lub w plikach konfiguracyjnych Boost?Zwiększanie statycznego łączenia
Odpowiedz
Wystarczy dodać -static
do inwokacji budowania. Oto krótki przykład sesja:
$ cat boost_formatted_time.cpp
#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/posix_time/posix_time_io.hpp>
using namespace boost::posix_time;
using namespace std;
int main(int argc, char **argv) {
time_facet *facet = new time_facet("%d-%b-%Y %H:%M:%S");
cout.imbue(locale(cout.getloc(), facet));
cout << second_clock::local_time() << endl;
}
$ g++ -o /tmp/bft_dyn boost_formatted_time.cpp -lboost_date_time
$ g++ -static -o /tmp/bft_stc boost_formatted_time.cpp -lboost_date_time
$ ls -lh /tmp/bft_*
-rwxr-xr-x 1 edd edd 216K 2010-02-24 12:34 /tmp/bft_dyn
-rwxr-xr-x 1 edd edd 1.5M 2010-02-24 12:34 /tmp/bft_stc
$ /tmp/bft_dyn
24-Feb-2010 12:34:55
$ /tmp/bft_stc
24-Feb-2010 12:34:59
$
Uwaga, w jaki sposób statyczny binarny jest 1.5MB w przeciwieństwie do 216KB dla dynamicznie połączonego wariantu. Wszystko odbywa się na testach Debiana z domyślnymi pakietami boost.
Podaj -Lpath/to/library/
do linkera.
Nie mam żadnych problemów z budową projektu i ścieżką do biblioteki, wystarczy zmienić typ połączenia: z dynamicznego na statyczny. –
To nie jest poprawne - potrzebujesz '-static'. '-L' podaje lokalizację biblioteki, ale nie jest typem połączenia. Zobacz moją odpowiedź na pełną sesję. –
- 1. Aplikacja do łączenia statycznego z Openssl C/C++ [x86_x64]
- 2. Jakie są zalety i wady statycznego łączenia biblioteki?
- 3. Błąd podczas statycznego łączenia libgmp w systemie Linux
- 4. Zwiększanie wartości Scala mapie
- 5. Zwiększanie wydajności ASP.net WebForm
- 6. funkcji Zwiększanie w tablicy
- 7. Zwiększanie wydajności ggplot2
- 8. Zwiększanie zmiennej w foldLeft
- 9. Zwiększanie szerokości wydruku matrycy
- 10. Dostęp do statycznego atrybutu statycznego typu ogólnego
- 11. Błędy łącza w niezmodyfikowanym szablonie MFC programu Visual Studio 2012 podczas statycznego łączenia MFC
- 12. W jaki sposób użytkownik automatyczny może określić kombinację łączenia statycznego i dynamicznego?
- 13. Zwiększanie świeżości dokumentów dzięki Lucene
- 14. Zwiększanie wartości za pomocą mangusty?
- 15. Testowanie i zwiększanie wydajności :: asio
- 16. Zwiększanie wartości w obiekcie zagnieżdżonym?
- 17. Zwiększanie rozmiaru gorących rogów Win8?
- 18. Zwiększanie sekwencji wielokolumnowej w PostgreSQL
- 19. Vim: Zwiększanie szybkości przesuwania dokumentu
- 20. Zwiększanie char wskaźniki w C++
- 21. Zwiększanie licznika w bazie danych
- 22. Destructor statycznego obiektu skonstruowany w destructor innego statycznego obiektu
- 23. Sposób deklarowania wątku lokalnego statycznego w szablonie
- 24. Wracając w statycznego inicjatora
- 25. Przeciążanie statycznego operatora C++
- 26. Przekierowanie statycznego indeksu nginx
- 27. Błąd łącza statycznego
- 28. Get pola statycznego
- 29. Sposób inicjowania statycznego SparseArray
- 30. Rozmiar stosu JavaScript i zwiększanie Chrome
Nie uruchamiam gcc z wiersza poleceń, używam Eclipse CDT. Prawdopodobnie -statyczny przełącznik można przekazać linkerowi z Ustawień projektu, postaram się znaleźć w ten sposób. Dziękuję Ci. –
Czy '-static' ma wpływ na wszystkie biblioteki, jeśli zawiera więcej niż 1 bibliotekę? – mrgloom