首页 > 解决方案 > 使用 GCC 编译 32 位程序时出现奇怪的错误

问题描述

当我尝试在 64 位 Linux 上使用 GCC 编译一个简单的 32 位 C 程序时,我收到以下消息:

[teo.samarzija@teos-acer-laptop debug]$ gcc -m32 -o program program.c
/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.1/ld: skipping incompatible /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.3.1/libgcc.a when searching for -lgcc
/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.1/ld: /usr/local/lib/gcc/x86_64-pc-linux-gnu/8.3.1/32/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info
/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.1/ld: /usr/local/lib/gcc/x86_64-pc-linux-gnu/8.3.1/32/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info
/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.1/ld: skipping incompatible /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.3.1/libgcc.a when searching for -lgcc
/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.1/ld: /usr/local/lib/gcc/x86_64-pc-linux-gnu/8.3.1/32/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info
/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.1/ld: /usr/local/lib/gcc/x86_64-pc-linux-gnu/8.3.1/32/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info
/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.1/ld: skipping incompatible /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.3.1/libgcc.a when searching for -lgcc
/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.1/ld: /usr/local/lib/gcc/x86_64-pc-linux-gnu/8.3.1/32/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info
/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.1/ld: /usr/local/lib/gcc/x86_64-pc-linux-gnu/8.3.1/32/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info
/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.1/ld: skipping incompatible /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.3.1/libgcc.a when searching for -lgcc
/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.1/ld: /usr/local/lib/gcc/x86_64-pc-linux-gnu/8.3.1/32/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info
/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.1/ld: /usr/local/lib/gcc/x86_64-pc-linux-gnu/8.3.1/32/libgcc.a(_muldi3.o): unable to initialize decompress status for section .debug_info
/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.1/ld: i386:x86-64 architecture of input file `/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.3.1/crtbegin.o' is incompatible with i386 output
/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.1/ld: i386:x86-64 architecture of input file `/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.3.1/crtend.o' is incompatible with i386 output
collect2: error: ld returned 1 exit status

我该怎么办?

标签: clinuxgcc32bit-64bitgnat-gps

解决方案


查看另一个与 GPS 相关的问题,似乎 GPS 带有在不支持 multilib 的情况下编译的 GCC。如果您运行gcc -v,您会注意到--disable-multilib输出中提到的选项。

那我想你倒霉了。您要么必须自己构建 GCC,要么从与 GPS 无关的其他来源安装它:例如,从您的 Linux 发行版的存储库中。然后你必须以某种方式告诉 GPS 使用这个其他版本的 GCC。


推荐阅读