2016-03-05 208 views
3

我试图构建GCC作为AIX的交叉编译器;主机和构建平台是Linux x86_64,目标是powerpc-aix5.2.0。我设法用本地AIX 6.1头文件(从/usr/include)和libs(只有/usr/lib/{crt0.o,crt0_64.o)交叉编译Binutils 2.20.1和GCC 4.4.7, libc.a,libc_r.a,libpthreads.a})。然后GCC正确交叉构建简单的C代码(如“你好,世界!”)分为单机的可执行文件,但它拒绝交叉编译共享对象:GCC可以交叉编译AIX吗?

collect2:初始化函数对象<路径中找到交叉编译libgcc_s.a>

我试图用高达2.26结果相同的Binutils的新版本。

然后我发现下面的comment

的Binutils进行了更新,以支持AIX 4.3.3,但一直没有维护,改善或更新的AIX 5.它可以做简单的事情,但不完全支持更高级的功能。例如,共享对象创建的某些方面不完整。

所以,我试图重新建设有目标= PowerPC的aix4.3.0(唯一的区别这一次是我与- 禁用multilib的配置GCC以避免错误“无法识别的操作码在上述工具链: `fmsub'“)。我尝试了Binutils 2.20.1和Binutils 2.26,但我仍然得到了在对象libgcc_s.a中找到的错误init函数。

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

+1

为什么不在AIX上编译?这本身就是一个有问题的平台,你不必在交叉编译时使它更成问题。 –

+0

@ZsigmondLőrinczy原因很多,这里有一些:企业网络策略禁止将过时/未修补的操作系统连接到公司网络。你想使用一个时髦的新的构建工具,不支持或容易在该平台上编译。您希望构建更快地发生,旧硬件正在限制您的构建速度。您的硬件出现故障,您没有预算或倾向来更换它。您无法虚拟化您的构建机器,并且需要。旧的硬件/操作系统不支持您的备份软件。 – Keeely

+0

那么,使用这种交叉编译的二进制文件永远是一场赌博:它可以工作与否。 (坦率地说,每个其他程序也是如此。) –

回答

2

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

+0

我认为这个评论意味着AIX 4.3.3被完全支持,并且它是仅支持简单事情的AIX 5。 – SJU