【问题标题】:How to build a static binary for GNU/Linux installations with old kernel?如何使用旧内核为 GNU/Linux 安装构建静态二进制文件?
【发布时间】:2012-06-26 11:21:44
【问题描述】:
$ 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 上工作。

【问题讨论】:

    标签: linux gcc libc


    【解决方案1】:

    您需要配置 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 静态链接您的程序。

    【讨论】:

      【解决方案2】:

      感谢上面的海报 ecatmur -- 使用配置选项 --enable-kernel=version 重新配置/重建 glibc 确实有效

      我将添加以下内容——您可以使用 gcc -static -L/path/to/local/lib(目录的大 L 选项),它似乎与链接到库文件本身一样有效。当我以后一种方式链接时(到 /path/to/local/lib/libc.a),它创建了一个不必要的大可执行文件。

      【讨论】:

      • 注意:通常可以选择制作“半静态”二进制文件。它将动态链接到 libc,但静态链接到其他库(您可以选择将哪些库包含到二进制文件中以及链接到哪些库)。可以通过手动编辑链接命令来完成。
      猜你喜欢
      • 2014-02-14
      • 2015-04-18
      • 2017-03-09
      • 2021-12-23
      • 2018-07-12
      • 2018-06-30
      • 2011-04-12
      • 2017-11-05
      • 2021-05-11
      相关资源
      最近更新 更多