【问题标题】:Can GCC cross-compile for AIX?GCC 可以为 AIX 交叉编译吗?
【发布时间】:2016-06-19 05:10:03
【问题描述】:

我正在尝试将 GCC 构建为 AIX 的交叉编译器;主机和构建平台是Linux x86_64,目标是powerpc-aix5.2.0。我已经设法用原生 AIX 6.1 头文件(来自 /usr/include)和库(仅 /usr/lib/{crt0)交叉编译 Binutils 2.20.1 和 GCC 4.4.7 .o,crt0_64.o,libc.a,libc_r.a,libpthreads.a})。然后 gcc 正确地将简单的 C 代码(例如“Hello, world!”)交叉构建为独立的可执行文件,但它拒绝交叉构建共享对象:

collect2:在对象

中找到初始化函数

我尝试使用最高 2.26 的较新版本的 Binutils,结果相同。

然后我发现了以下comment

Binutils 已更新为支持 AIX 4.3.3,但尚未针对 AIX 5 进行维护、改进或更新。它可以做一些简单的事情,但不能完全支持更高级的功能。例如,共享对象创建的某些方面并不完整。

所以我尝试使用 target=powerpc-aix4.3.0 重新构建上述工具链(这次唯一的区别是我使用 --disable-multilib 配置了 GCC 以避免错误“Unrecognized操作码:`fmsub'")。我尝试了 Binutils 2.20.1 和 Binutils 2.26,但我仍然收到错误 init function found in object libgcc_s.a

现在我想知道是否有用于交叉编译的 AIX 版本,尤其是。共享对象,受 GCC 和 Binutils 支持。

【问题讨论】:

  • 为什么不在 AIX 上编译?它本身就是一个有足够问题的平台,您不必通过交叉编译使其更成问题。
  • @ZsigmondLőrinczy 有很多原因,这里有一些: 公司网络政策禁止将过时/未打补丁的操作系统连接到公司网络。您想使用该平台上不支持或易于编译的时髦新构建工具。您希望构建速度更快,而旧硬件限制了您的构建速度。您的硬件出现故障,您没有预算或打算更换它。你不能虚拟化你的构建机器,你需要。旧硬件/操作系统不适用于您的备份软件。
  • 好吧,使用这种交叉编译的二进制文件总是一场赌博:要么工作要么不工作。 (坦率地说,其他所有程序也是如此。)
  • 应该坚持使用 IBM 编译器(甚至不使用 GCC),以降低风险。但是现在我盯着大约 80 个 errclear 实例,想知道它们是如何到达那里的,它们是否重要,并想知道为什么一个测试会抛出“检测到无效的文件系统控制数据”,而不是专注于编译/调试代码是我应该做的,所以我可以认同这个问题。

标签: gcc cross-compiling aix


【解决方案1】:

您的问题的答案是“否”。正如评论所说,链接器 (ld) 的 GCC 版本并不真正适用于 AIX。我在 AIX 上编译的所有开源代码都使用 GCC,但我使用本机 ld 命令。

【讨论】:

  • 我认为评论暗示 AIX 4.3.3 得到完全支持,而 AIX 5 只支持简单的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 2017-10-09
  • 2015-12-20
  • 2015-12-23
  • 2013-07-10
  • 2012-02-17
相关资源
最近更新 更多