【问题标题】:How to build a gcc compiler on Linux that builds both 32-bit and 64-bit code如何在 Linux 上构建同时构建 32 位和 64 位代码的 gcc 编译器
【发布时间】:2019-02-13 01:22:56
【问题描述】:

我按照以下 URL 中的说明为 Linux 构建了 gcc 编译器:

https://solarianprogrammer.com/2016/10/07/building-gcc-ubuntu-linux/

生成的编译器可以毫无问题地构建 64 位代码。

但是,当我尝试构建 32 位代码(通过指定 -m32 编译器选项)时,出现错误。

这是我得到的错误:

  1. 找不到 -lstdc++
  2. 找不到-lgcc_s
  3. 搜索 foor -lgcc 时跳过不兼容的 libgcc.a
  4. 找不到-lgcc

显然,当我构建编译器时,我做错了 - 谁能告诉我我做错了什么以及如何重新构建编译器来构建 32 位和 64 位代码。

【问题讨论】:

  • 所有这些都是抱怨它找不到 32 位版本的库。您可能需要构建这些以及构建编译器本身。
  • 这是链接中的配置行:../gcc-8.1.0/configure -v --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target =x86_64-linux-gnu --prefix=/usr/local/gcc-8.1 --enable-checking=release --enable-languages=c,c++,fortran --disable-multilib --program-suffix=-8.1
  • 该行为主机、构建和目标指定 x86_64。这是否意味着我必须构建一个可以构建 32 位代码的单独编译器?或者如果我只是构建 32 个库并重复构建编译器本身的过程,这足以构建 64 位和 32 位二进制文​​件吗?
  • --disable-multilib 明确禁用 32 位支持...
  • 好的,让我试试你的建议。

标签: linux gcc ubuntu-16.04


【解决方案1】:

您至少需要在配置命令行中使用--with-multilib-list=m32,m64 进行配置。1您绝对需要使用--disable-multilib 进行配置。您可能还需要构建和安装其他库的其他版本。

一般来说,搜索“multilib”的文档会显示所有关于构建或使用具有多个目标 ABI 的 gcc 的地方。


1这是至少某些版本的 gcc 的默认设置。如果您想尝试一下,也可以添加mx32

【讨论】:

    猜你喜欢
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 2010-12-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多