11
$ 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.

古いシステムで動作する静的バイナリをビルドするには? 静的バイナリは 2.4 でも動作することを期待しています。

4

2 に答える 2

13

古いカーネル バージョンを対象とするように glibc を構成する必要があります。http://www.gnu.org/software/libc/manual/html_node/Configuring-and-compiling.htmlによると、glibc は古いカーネル バージョンを対象とする形式の configure オプションを受け入れます。--enable-kernel=versionversion2.4.20

その後、プログラムを静的にリンクできますgcc -static -nodefaultlibs [...] /path/to/my/libc.a

于 2012-06-26T12:18:57.183 に答える
1

上記のポスターecatmurに感謝します-configureオプション--enable-kernel=versionを使用してglibcを再構成/再構築することは実際に機能します

以下を追加します-gcc-static-L / path / to / local / lib(ディレクトリへのbig Lオプション)を使用でき、ライブラリファイル自体へのリンクと同様に機能するようです。後者の方法(/path/to/local/lib/libc.a)でリンクすると、不必要に大きな実行可能ファイルが作成されました。

于 2012-09-13T05:54:02.900 に答える