使用GCC编译32位程序时出现奇怪的错误

3

当我在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

我该怎么办?


2
看起来你只有64位版本的GCC。 - Alex Lop.
2
你使用的是哪个Linux发行版?你是如何安装GCC的,从哪里安装的?如果你是从源代码编译GCC的,你是如何配置它的? - Ruslan
@Ruslan,我使用了带有GNAT Community IDE的GCC。 - FlatAssembler
1个回答

4

看起来,根据另一个与GPS相关的问题,GPS附带的GCC编译时没有支持多库的选项。如果你运行gcc -v,你会注意到输出中提到了--disable-multilib选项。

我猜你现在就没辙了。你要么自己构建GCC,要么从与GPS无关的来源(例如Linux发行版的仓库)安装它。然后,你需要以某种方式告诉GPS使用这个其他版本的GCC。


谢谢!我从源代码编译了GCC 9.3.0,现在它运行得很好。 - FlatAssembler
顺便问一下,@Ruslan,你知道我怎么告诉GPS使用不同的C和C++编译器吗? - FlatAssembler
@FlatAssembler 不,我从来没有用过GPS。 - Ruslan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接