是什么让64位系统上的32位gcc将64位二进制

是什么让64位系统上的32位gcc将64位二进制,gcc,Gcc,我有一个64位的系统,但是gcc是32位的,当我这样做的时候 >./gcc -c foobar.c 它生成64位的foobar.o。好的,但是它怎么知道要这么做呢?根据它知道的生成64位对象的环境设置,在哪里记录了该设置 想一想,奇怪的是它会这样做,不是吗??但是file实用程序清楚地表明,gcc是32位,foobar.o是64位。(我将所有内容移到了同一个目录中,以免混淆。) 我还检查了它读取的3个动态链接库:libc、libm和libz,它们也是32位的 为了澄清,我不想知道,如何让

我有一个64位的系统,但是gcc是32位的,当我这样做的时候

>./gcc -c foobar.c
它生成64位的
foobar.o
。好的,但是它怎么知道要这么做呢?根据它知道的生成64位对象的环境设置,在哪里记录了该设置

想一想,奇怪的是它会这样做,不是吗??但是
file
实用程序清楚地表明,gcc是32位,foobar.o是64位。(我将所有内容移到了同一个目录中,以免混淆。)

我还检查了它读取的3个动态链接库:libc、libm和libz,它们也是32位的


为了澄清,我不想知道,如何让它做32位。我想知道,它现在在看什么,它让它做64。这是我的问题,而不是如何强制它反过来。

配置GCC时,可以指定三种不同的系统:

  • 构建:-将要构建GCC的系统(可能不是 (与您的问题相关)
  • 主机:-GCC将要访问的系统 被执行(在您的情况下为32位)
  • 目标:执行GCC生成的二进制文件的系统(本例中为64位)
您可以通过运行以下命令查看GCC的配置:

gcc -v

命令(查找--{build,host,target}选项。

你绝对确定gcc二进制文件是32位可执行文件吗?@no是的,我检查过(使用
文件
实用程序),事实上,我自己从32位设置中移动了
gcc
二进制文件(不要问为什么).你试过使用-m64吗?大概你没有移动binutils,所以尽管编译器生成32位代码,汇编程序还是会生成64位elf对象文件。我不希望将32位工具链移动到64位平台“正常工作”@nos编译命令只读取5个文件:gcc、libc libm libz和foobar.c。所有这些二进制文件都是32位的。我确信它不会读取任何其他文件。