我试图构建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支持。
为什么不在AIX上编译?这本身就是一个有问题的平台,你不必在交叉编译时使它更成问题。 –
@ZsigmondLőrinczy原因很多,这里有一些:企业网络策略禁止将过时/未修补的操作系统连接到公司网络。你想使用一个时髦的新的构建工具,不支持或容易在该平台上编译。您希望构建更快地发生,旧硬件正在限制您的构建速度。您的硬件出现故障,您没有预算或倾向来更换它。您无法虚拟化您的构建机器,并且需要。旧的硬件/操作系统不支持您的备份软件。 – Keeely
那么,使用这种交叉编译的二进制文件永远是一场赌博:它可以工作与否。 (坦率地说,每个其他程序也是如此。) –