2013-01-16 20 views
5

I statycznie skompilowałem i połączyłem program na najnowszym komputerze z Linuksem, i uruchomiłem go na innym Linuxie, który ma 9 lat. Dało mi to błąd "FATAL: kernel too old" i zrezygnowałem. W szczególności nowy to Fedora 18 (gcc 4.7.2, glibc 2.16, jądro 3.7.2), a stary to RHEL4.8 (glibc 2.3.4, jądro 2.6.9). Ponieważ jest to link statyczny, wersja glibc nie powinna mieć znaczenia. Chyba problem polega na tym, że program wywołuje wywołania systemowe, których nie ma w starym jądrze.Kompilowanie programu dla starego jądra

Jeśli rozwój starego systemu nie jest możliwy, w jaki sposób mogę zbudować program w nowym systemie i uruchomić go w starszym (lub nawet lepszym)? Szukałem sposobu uruchomienia gcc w trybie kompatybilnym, który wywołuje tylko stare wywołania systemowe. Bez szczęścia.

+2

Pobierz starą wersję glibc i połącz z nią. Nowa glibc nie będzie działać na starych jądrach. –

Odpowiedz

5

Najłatwiej jest zawsze budować na starszym systemie.

Alternatywnie, skopiuj nagłówki glibc i biblioteki statyczne ze starego systemu do nowego i połącz je z nimi.

Jeśli to nie zadziała, będziesz musiał przebudować glibc na --enable-kernel=2.6.9 lub coś w tym stylu.

+0

Dzięki. Czy jeśli przebuduję glibc z włączonym jądrem, czy muszę przebudować wszystkie inne biblioteki, takie jak libjpeg, na tym glibc? Innymi słowy, czy mój niestandardowy link glibc z biblioteką libjpeg? –

+0

Nie wierzę w to. Myślę, że ta flaga jedynie dostosowuje backend użycia wywołań systemowych, ale wciąż używasz tej samej biblioteki C. Może się okazać, że ostatnia biblioteka C obsługuje tylko jądra po jakiejś dacie, więc aby powrócić do tej pory, konieczne może być przejście na starszą wersję. Nie polecałbym instalowania starszej biblioteki jako biblioteki systemowej. Po prostu umieść w nim link do swojej kompilacji (będziesz potrzebował niestandardowych flag kompilatora). – ams

Powiązane problemy