2012-06-26 12 views
6
$ printf 'int main(){}' | gcc -static -x c - -o hello 
$ scp hello vi-server.org:./ 
hello        100% 565KB 565.2KB/s 00:00 
$ ssh -t vi-server.org "./hello; uname -r" 
FATAL: kernel too old 
sh: line 1: 15378 Segmentation fault  ./hello 
2.6.18-274.... # can't easily upgrade the kernel 
Connection to vi-server.org closed. 

Jak zbudować statyczny plik binarny, który będzie działać na starych systemach? Oczekuję, że statyczne pliki binarne będą działać nawet w wersji 2.4.Jak zbudować statyczny plik binarny dla instalacji GNU/Linux ze starym jądrem?

Odpowiedz

0

Dziękuję powyższego plakatu ecatmur - to rzeczywiście działa rekonfiguracji/przebudować glibc z opcją --enable-kernel = wersja

Dodam następujące - można użyć gcc -static -L/path/to/local/lib (duża opcja L do katalogu) i wygląda na to, że działa równie dobrze, jak połączenie z samym plikiem biblioteki. Kiedy połączyłem się w ten ostatni sposób (do /path/to/local/lib/libc.a), utworzyłem niepoprawnie duży plik wykonywalny.

+2

Uwaga: często istnieje opcja utworzenia pliku binarnego "półstatycznego". Połączy się dynamicznie z biblioteką libc, ale statycznie z innymi bibliotekami (możesz wybrać biblioteki, które mają zostać dołączone do pliku binarnego i do których można się połączyć). Można to zrobić ręcznie edytując polecenie łączenia. –

Powiązane problemy