为2.4.0内核构建二进制(telnet),i586架构

时间:2016-10-26 19:51:45

标签: linux gcc telnet

我正在尝试交叉编译二进制文件以在旧的Linux发行版(内核2.4.25,i586体系结构)上使用。

我采取的步骤

  • 我已经下载了landley i586交叉编译器(http://landley.net/aboriginal/downloads/binaries/
  • 我下载了net-utils源:https://ftp.gnu.org/gnu/inetutils/版本1.9.4
  • 我在我的路径中包含了交叉编译器:export PATH=/root/Documents/cross-compiler-i586/bin/:$PATH
  • 然后我按如下方式构建了telnet二进制文件:LDFLAGS=”-static" ./configure --host=i586 --build=x86_64 --target=i586 --disable-ifconfig --with-ncurses-include-dir=/root/Documents/tnbuild --disable-hostname --disable-logger --disable-rcp --disable-rexec --disable-rlogin --disable-rsh --disable-tftp --disable-traceroute --disable-inetd --disable-rexecd --disable-syslogd --disable-tftpd
  • 使用file命令成功编译并检查(剥离后)二进制文件,提供:telnet: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, stripped

我将它与已经在旧Linux系统上的二进制文件进行了比较,输出完全相同:ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter lib/ld-linux.so.2, for GNU/Linux 2.4.0, stripped

我面临的问题

我编译的telnet二进制文件不能在旧的Linux系统上运行。抛出的错误只是“分段错误”。谷歌搜索这个错误得知它可能是由于架构上的差异(i586?),但我不知道如何修复它,因为'文件'对于工作二进制文件以及失败的二进制文件,命令输出完全相同。

然后我偶然发现了这个主题:GCC Cross compile to a i586 architecture (Vortex86DX),但由于没有追求,我不确定我是否应该为i586编译所有工具链以及我究竟需要做什么。

1 个答案:

答案 0 :(得分:0)

您是否有特定的理由想要交叉编译,而不仅仅是编译通用的32位i386?如果CPU不支持某些编译器优化,您可能需要禁用它们,但您可能不需要创建静态链接的二进制文件。

用于编译32位(-m 32)的

These instructions似乎足以创建telnet二进制文件。

他们归结为:

apt-get install gcc-multilib;
./configure CFLAGS='-m32' -disable-ifconfig \
    --with-ncurses-include-dir=/root/Documents/tnbuild  \
    --disable-hostname --disable-logger --disable-rcp \
    --disable-rexec --disable-rlogin --disable-rsh \
    --disable-tftp --disable-traceroute --disable-inetd \
    --disable-rexecd --disable-syslogd --disable-tftpd
make