BOINC@Poland

Inne => Archiwum => Wątek zaczęty przez: sesef w 31 Maj 2010, 16:38

Tytuł: Kompilacja a przenośność aplikacji
Wiadomość wysłana przez: sesef w 31 Maj 2010, 16:38
Jak to wygląda z przenośnością aplikacji po skompilowaniu ich na linuxie? Trzeba dodawać jakieś konkretne dyrektywy podczas kompilacji? Potrzebuje skompilować wrapper do projektu i wypadałoby, żeby działała nie tylko na moim kompie.
Tytuł: Odp: Kompilacja a przenośność aplikacji
Wiadomość wysłana przez: buninek w 31 Maj 2010, 17:09
Jeśli skompilujesz statycznie, to w obrębie danej architektury będzie pracować na każdym systemie.
LDFLAGS="-static" make
       
W przypadku dynamicznego linkowania, linkowane są wersje bibliotek z systemu na którym, go budujesz. Zgodne "w górę".
Stąd, aby taka aplikacja była jak najbardziej przenośna, dobrze jest to budować na jak najbardziej leciwym systemie.
Na przykład zainstalować na wirtualce system z (nawet) glibc w wersji 2.2(2.3) - starego Centosa, Debiana.


Najwygodniej będzie zrobić całkowicie statyczny wrapper.
http://www.dwheeler.com/program-library/Program-Library-HOWTO/index.html (http://www.dwheeler.com/program-library/Program-Library-HOWTO/index.html)
http://boinc.berkeley.edu/trac/wiki/CompileApp (http://boinc.berkeley.edu/trac/wiki/CompileApp)
Tytuł: Odp: Kompilacja a przenośność aplikacji
Wiadomość wysłana przez: buninek w 31 Maj 2010, 19:44
Jeśli będziesz miał problem w zbudowaniu całkowicie statycznego wrappera, skorzystaj z tych bibliotek.
http://dl.dropbox.com/u/349831/boinc-5.10.45-i686.tar.bz2 (http://dl.dropbox.com/u/349831/boinc-5.10.45-i686.tar.bz2)

To jest boinc w wersji 5.10.45, całkowicie przenośny zbudowałem go na Red Hat Enterprise Linux AS 2.1.
Sprawdzałem na standardowym wrapperze, źródła pobrane stąd: genwrapper.sourceforge.net

Buduje się w wersji całkowice statycznej bez problemów.
Tytuł: Odp: Kompilacja a przenośność aplikacji
Wiadomość wysłana przez: sesef w 01 Czerwiec 2010, 11:47
Cytat: buninek w 31 Maj 2010, 17:09
Jeśli skompilujesz statycznie, to w obrębie danej architektury będzie pracować na każdym systemie.
LDFLAGS="-static" make

A kompilacja statyczna odwołuje się od bibliotek z danego systemu? Kombinuje jak tutaj skompilować wrapper na PS3 nie posiadając tej architektury.
Tytuł: Odp: Kompilacja a przenośność aplikacji
Wiadomość wysłana przez: buninek w 01 Czerwiec 2010, 13:02
Zdaje mi się, że taka aplikacja nie będzie przenośna na arch PPC.  Choć szczerze mówiąc, to ani nie mam odpowiedniej wiedzy, ani praktyki, żeby to jednoznacznie stwierdzić. XD

http://stackoverflow.com/questions/588814/will-static-linking-on-one-unix-distribution-work-but-not-another (http://stackoverflow.com/questions/588814/will-static-linking-on-one-unix-distribution-work-but-not-another)
http://wiki.allegro.cc/index.php?title=Unix_architecture (http://wiki.allegro.cc/index.php?title=Unix_architecture)

Jest możliwość cross kompilacji, czyli budowanie aplikacji na inne architektury. Z tym, że zbudowanie takiego pełnego środowiska, to nie takie sobie hop-siup.
Inna możliwość to wykorzystanie qemu-ppc.
Tytuł: Odp: Kompilacja a przenośność aplikacji
Wiadomość wysłana przez: Troll81 w 01 Czerwiec 2010, 14:30
A może łatwiej wypożyczyć PS3??
Tytuł: Odp: Kompilacja a przenośność aplikacji
Wiadomość wysłana przez: sesef w 03 Czerwiec 2010, 14:23
Jeszcze jedna sprawa jaka flagę trzeba dodać żeby skompilować wersję x86 na systemie x64.
Tytuł: Odp: Kompilacja a przenośność aplikacji
Wiadomość wysłana przez: buninek w 03 Czerwiec 2010, 15:05
gcc -m32 prog.c -o prog

Mowa o dynamicznym linkowaniu. Trzeba zainstalować podstawowe biblioteki (32-bit), tzw. multi-lib, niezbędne do budowy.
Nazwy pakietów, to już specyfika danej dystrybucji.

W przypadku Debiana, Ubuntu, to chyba te pakiety

sudo apt-get install gcc-multilib libc6-i386 lib6-dev-i386


Tytuł: Odp: Kompilacja a przenośność aplikacji
Wiadomość wysłana przez: TJM w 20 Czerwiec 2010, 10:33
Z kompilacją statyczną wcale nie jest tak za różowo, zakres kompatybilności mocno się zwiększa, ale i tak jest pewna dolna granica wersji systemu, poniżej której progs się wysypie. Swego czasu gdy miałem jeszcze jeden z serwerów na starym Slackware z kernelem 2.2, praktycznie nic BOINCowego na nim nie ruszało - samego core clienta musiałem zbudować ze źródeł (działały wersje do max 5.4 co już wtedy było przestarzałe i do bani), 5.8 wywalały SIGSEGV przy starcie.
Podobnie BOINCowe aplikacje - jedyny projekt jaki działał to Enigma, bo przekompilowałem aplikację ze źródeł i użyłem app_info. Statyczna wersja nie miała chęci ruszyć, ani moja, ani dostarczona przez Stefana Kraha.
Jako wielki plus tej maszyny i systemu trzeba zaliczyć fakt, że dzięki niej powstała jedna z najbardziej uniwersalnych optymalizacji - 0.76-pIII która do tej pory jest najszybsza na dużej części maszyn. Oraz, co ciekawe - mimo dynamicznej kompilacji, rusza na 80% systemów lub lepiej.

Tytuł: Odp: Kompilacja a przenośność aplikacji
Wiadomość wysłana przez: buninek w 20 Czerwiec 2010, 13:31
Duży plus dynamicznej aplikacji to jej rozmiar. Przy ogólnym transferze może to mieć znaczenie, o ile popularność platformy linuksowej będzie duża.

Aplikacja enigmy to się fajnie kompiluje z diet libc. Rozmiar aplikacji statycznej 61 kB.
W pamięci RAM 180kB. Co się przekłada na jej ogólną wydajność, lepsza o ok 5%.