【发布时间】: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