32位的gcc在64位系统上如何生成64位二进制文件

3

我有一个64位系统,但gcc是32位的,当我执行以下操作时:

>./gcc -c foobar.c

它生成了一个名为foobar.o的64位对象文件。好的,但是它怎么知道要这样做呢?基于什么环境设置,它知道要生成64位目标文件呢?这个在哪里有记录?

仔细想一想,它这样做很奇怪,不是吗?但是file实用程序清楚地表明,gcc是32位的,而foobar.o是64位的。(我把所有东西都移到了同一个目录下,这样就不会混淆)

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

澄清一下,我不想知道如何让它变成32位。我想知道它现在正在看什么,以致于会生成64位的目标文件。这是我的问题,不是如何强制它反过来。


你确定gcc二进制文件是32位可执行文件吗? - nos
@nos 是的,我已经检查过了(使用 file 工具),实际上,我自己把那个 gcc 二进制文件从一个 32 位设置中移动了(不要问为什么)。 - Mark Galeck
1
你尝试过使用 -m64 吗? - perencia
@nos 编译命令只读取5个文件:gcc、libc、libm、libz和foobar.c。所有这些二进制文件都是32位的。我可以确定它不会读取任何其他文件。 - Mark Galeck
使用-v编译是否会给出任何提示? - Marc Glisse
显示剩余4条评论
1个回答

0

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

  • build:- GCC将要构建的系统(可能与您的问题无关)
  • host:- 执行GCC的系统(在您的情况下为32位)
  • target:- 由GCC生成的二进制文件将要执行的系统(在您的情况下为64位)

您可以通过运行以下命令来查看GCC的配置:

gcc -v

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


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