我正在尝试交叉编译二进制文件以在旧的Linux发行版(内核2.4.25,i586体系结构)上使用。
export PATH=/root/Documents/cross-compiler-i586/bin/:$PATH
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
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编译所有工具链以及我究竟需要做什么。
答案 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