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.
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)
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.
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.
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.
A może łatwiej wypożyczyć PS3??
Jeszcze jedna sprawa jaka flagę trzeba dodać żeby skompilować wersję x86 na systemie x64.
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
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.
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%.