• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Allegro 5 Linux - kompilacja ze statycznie zlinkowaną biblioteką

0 głosów
387 wizyt
pytanie zadane 19 stycznia 2019 w C i C++ przez niezalogowany
Witam, od kilku dni staram się skompilować mój projekt, tak żeby można go było uruchomić na innym komputerze bez dołączania biblioteki Allegro. Dowiedziałem się, że potrzebuje skompilować pliki ze statycznie zlinkowaną biblioteką. Niestety znalezione w internecie porady mi nie pomagają. W folderze /usr/lib posiadam pliki o rozszerzeniu (.a) z biblioteki Allegro (dodam, że u innych miały one w nazwie -static, u mnie tak  nie ma), lecz gdy próbuje skompilować pliki z flagą --static dalej wykorzystywane są pliki do linkowania dynamicznego. Co muszę zrobić, żeby skompilować mój projekt ze statycznie zlinkowaną biblioteką Allegro?
komentarz 24 sierpnia 2019 przez Ad19am94 Początkujący (440 p.)
Nie znam się najlepiej ale wydaje mi się że jeżeli podlinkujesz plik(.a) ze wszystkimi definicjami allegro to możesz dodawać: #include <allegro5/allegro_image.h> #include <allegro5/allegro_audio.h> i inne nagłówki a po skompilowaniu program powinien wymagać tylko 1 DLL o tej samej nazwie co plik(.a).
komentarz 24 sierpnia 2019 przez tkz Nałogowiec (42,040 p.)

Czy można kompilować statycznie za pomocą gcc lub g ++ w systemach Linux?

To zależy.

Możesz spróbować skompilować i połączyć cały swój kod za pomocą gcc -staticlub g++ -static. W kilku przypadkach (np. Aplikacje wiersza poleceń, takie jak twój hello world), zadziałałoby.

Dystrybucje systemu Linux, podobnie jak wiele bibliotek współdzielonych. Większość z nich intensywnie korzysta z bibliotek współdzielonych (szczególnie do aplikacji graficznych). Przeczytaj artykuł Drepper's How to Write Shared Libraries, aby uzyskać więcej.

Być może masz problemy z licencjonowaniem. Aby oburzająco uprościć, wysyłanie kodu statycznie połączonego z biblioteką LGPL (lub GPL) może być nielegalne (wbrew licencji LGPL ). Zło tkwi w szczegółach.

Niektóre podstawowe funkcje, szczególnie związane z DNS (np. Getaddrinfo (3) i getnameinfo (3) ) są wewnętrznie wykorzystujące techniki wtyczek à la dlopen (3) , więc sortowanie wymaga dynamiki libc.so(więcej informacji znajduje się w nsswitch.conf (5) ).

Niektóre rzeczy związane z X11 , w szczególności związane z czcionkami, również oczekują rzeczy związanych z wtyczkami (IIRC, Xft); być może SFML ich używa. BTW, SFML najprawdopodobniej jest zainstalowany jako biblioteki współdzielone, więc musisz odbudować SFML z kodu źródłowego ...

Wreszcie statycznie połączony program może być bardziej powiązany z pewną konkretną wersją jądra niż z wersją dynamicznie połączoną (w zasadzie tak nie jest). Może się zdarzyć, że możesz mieć niezgodności z bardzo starymi lub przyszłymi jądrami (ale zwykle nie).

Zobacz także ldd (1) , plik (1) , pmap (1) , proc (5) , vdso (7)

W rzeczywistości łatwiej może być dostarczenie kodu źródłowego do systemu docelowego, poproszenie administratora systemu o zainstalowanie wymaganych zależności i zbudowanie kodu na zdalnym celu (np. Przy użyciu ssh)

Możesz spróbować połączyć statycznie większość bibliotek, ale nie wszystkie (np. Link statycznie libstdc++.ai dynamicznie libc.so), grając z opcjami łączenia GCC . Zobacz to i tamto

Być może najpierw spróbujesz połączyć statycznie jakieś demo SFML .... lub po prostu scp(dynamicznie połączony) program binarny i spróbować uruchomić go zdalnie (może być w stanie uruchomić).

https://stackoverflow.com/questions/32224494/is-it-possible-to-compile-statically-with-gcc-or-g-on-linux-based-systems

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
3 odpowiedzi 1,723 wizyt
pytanie zadane 30 października 2015 w C i C++ przez Caspariano Użytkownik (760 p.)
0 głosów
1 odpowiedź 274 wizyt
pytanie zadane 18 stycznia 2019 w Systemy operacyjne, programy przez Rosol Kuba Początkujący (380 p.)
0 głosów
1 odpowiedź 404 wizyt
pytanie zadane 17 stycznia 2019 w C i C++ przez niezalogowany

93,777 zapytań

142,736 odpowiedzi

323,388 komentarzy

63,381 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...