AIX5.3安装Python3遇到的坑

最近在折腾AIX5.3,这是一款非常古老的power架构的服务器,目前IBM官方已经不维护,但是仍然在很多银行里跑着比较核心的业务,由于我们的客户大部分是面向银行,少不了要做AIX5.3上的应用软件适配。本文记录在AIX5.3上编译安装Python3时遇到的一些坑。

由于AIX5.3非常古老,基本上很难找得到可以用的Python3安装包,只能通过源码编译的方式进行编译。

在此之前,需要安装好gcc编译器。安装过程不表(坑也比较多,但都是rpm安装,这里就不详细展开了),我安装的gcc版本是4.8.4。

坑1:缺失libm

遇到的第一个问题,就是缺少libm。
在这里插入图片描述
libm是链接math.h的库,玩过C/C++的同学一定非常熟悉,这个库理论上是系统自带的,可世事就是这么无常,偏偏是缺了这个基础库。
按照网上说法,这个库是在bos.adt.libm这个Fileset里面,但是并找不到这个东西,IBM官方倒是提供了下载链接:https://www.ibm.com/support/pages/fileset-information-bosadtlibm, 但是根本下载不了,原因是AIX5.3官方已经停止维护了,所以这个下载链接实际上是放了个寂寞。
好在我手上是有一个AIX5.3的iso镜像的,于是想,既然是基础包,难道不能从这个iso里解压出来吗?
说干就干,可是解压出来的iso文件中,根本找不到任何关于libm的东西,没有libm.a, 也没有bos.adt.libm。
走到这一步,似乎山穷水尽了。但我仍不肯死心,在网上屎里淘沙,历尽千辛万苦,中间的过程不表了,功夫不负有心人,感谢万能的谷歌,终于找到了蛛丝马迹,说bos.adt.libm在CD1的bos.dat中, 查了一下,这个文件居然是有的!
于是使用installp -d bos.adt -l命令看了一下,竟然真的有libm:
在这里插入图片描述
终于看到了胜利的曙光了。
接下来就是安装这个bos.adt了,闲话不多说,安装命令搞起:

bash-4.2# ls
bos.adt       bos.adt.data
bash-4.2# installp -d bos.adt -acgXY all

安装过程还算顺利:
在这里插入图片描述
检查了一下,确实安装上了:
在这里插入图片描述
写个demo验证一下:

#include<stdio.h>
#include<math.h>

int main(void){
        printf("2^2 = %f\n", pow(2,2));
        return 0;
}

编译运行:

bash-4.2# gcc 1.c -lm   
bash-4.2# ./a.out 
2^2 = 4.000000

完美解决。

坑2:SEVERE ERROR: Symbol C_BSTAT

继续编译Python之旅。
满以为解决了libm的问题,后面就一马平川了,可接下来马上又报了个错:
在这里插入图片描述
具体报错就是:

"ld: 0711-593 SEVERE ERROR: Symbol C_BSTAT (entry 599) in object libpython3.6m.a[getbuildinfo.o]:
        The symbol refers to a csect with symbol number 0, which was not
        found. The new symbol cannot be associated with a csect and
        is being ignored."

对于这个报错,网上的说法是,这是gcc的BUG,可以通过加编译参数解决:

but this bug is a real show stopper, as it stops one building many
bits of Sage. The GNU 'patch' program is one that's affected. That can
be fixed by setting CFLAGS to -g0, but it would be a huge task to
change all of the software to disable debug information, apart from
the fact it would make debugging harder!!

完整链接如下: https://comp.unix.aix.narkive.com/yfW4nvvT/ld-0711-593-severe-error-symbol-c-bstat-anyone-got-a-better-solution
按这个说法,只需要加上CFLAGS=g0即可解决这个问题,于是修改编译参数:

./configure CC=/usr/bin/gcc --enable-optimizations CFLAGS=-g0

现在终于不报这个错了。

坑3:TOC overflow

可是接下来马上又报了一个错:
在这里插入图片描述
这个错误仍然是gcc报出来的,说TOC overflow
我们从gcc的官方链接中可以找到关于TOC的相关说明:https://gcc.gnu.org/onlinedocs/gcc/RS_002f6000-and-PowerPC-Options.html
所谓的TOC,就是Table Of Contents,他会为每个可执行文件生成一个.toc目录,由于Python本身源码比较大,因此生成的toc也就比较大,这就造成了溢出,官方文档还有一段说明:
在这里插入图片描述
也就是说,可以通过增加-mminimal-toc编译选项来解决。
于是,编译Python的编译选项就变成了如下这个样子:

./configure CC=/usr/bin/gcc CFLAGS="-mminimal-toc -g0"
make
make install

至此,安装完成。
在这里插入图片描述
设置一下环境变量:

export PATH=$PATH:/usr/local/bin

可以看到,已经能正常运行python3了。
在这里插入图片描述


推荐一个零声学院免费教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习: C/C++Linux服务器开发/高级架构师

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值