$ 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上工作。
答案 0 :(得分:10)
您需要配置glibc以定位较旧的内核版本。每http://www.gnu.org/software/libc/manual/html_node/Configuring-and-compiling.html个glibc接受配置选项--enable-kernel=version
,其中version
的格式为2.4.20
,以定位较旧的内核版本。
然后,您可以将您的计划与gcc -static -nodefaultlibs [...] /path/to/my/libc.a
静态链接。
答案 1 :(得分:1)
感谢上面的海报ecatmur - 确实可以使用configure选项重新配置/重建glibc --enable-kernel = version
我会添加以下内容 - 您可以使用gcc -static -L / path / to / local / lib(目录的大L选项),它似乎与链接到库文件本身一样。当我以后一种方式链接(到/path/to/local/lib/libc.a)时,它创建了一个不必要的大型可执行文件。