AIX5.3安装Python3遇到的坑

简介: 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服务器开发/高级架构师

目录
相关文章
|
28天前
|
存储 数据库 时序数据库
InfluxDB的安装与Python调用
InfluxDB是一个高性能的时序数据库(Time-Series Database, TSDB),用于存储和分析时间序列数据的开源数据库,它非常适合于处理大量的时间戳数据,如金融市场数据、IoT 设备数据、监控数据等,尤其适合处理大量的时序数据和高频数据。 主要特性有: • 内置HTTP接口,使用方便 • 数据可以打标记,查询可以很灵活 • 类SQL的查询语句 • 安装管理很简单,并且读写数据很高效 • 能够实时查询,数据在写入时被索引后就能够被立即查出
InfluxDB的安装与Python调用
|
17天前
|
Python Windows
Python安装第三方库太慢?配置好这个速度飞起
Python安装第三方库太慢?配置好这个速度飞起
yolov5项目如何安装pycocotools和opencv-python?
本文提供了解决yolov5项目中安装pycocotools和opencv-python包失败的两种方法:手动安装或使用国内镜像源进行安装。
yolov5项目如何安装pycocotools和opencv-python?
|
22天前
|
SQL 关系型数据库 API
Python 开发环境的准备以及一些常用类库模块的安装
在学习和开发Python的时候,第一步的工作就是先准备好开发环境,包括相关常用的插件,以及一些辅助工具,这样我们在后续的开发工作中,才能做到事半功倍。下面介绍一些Python 开发环境的准备以及一些常用类库模块的安装和使用的经验总结,供大家参考了解。
|
20天前
|
Python
【Azure 应用服务】如何为Web Jobs 安装Python包呢?
【Azure 应用服务】如何为Web Jobs 安装Python包呢?
【Azure 应用服务】如何为Web Jobs 安装Python包呢?
|
29天前
|
Python
Mac安装Python3.12开发环境
Mac安装Python3.12开发环境
101 2
|
30天前
|
Linux 网络安全 Python
Linux离线安装Python时ssh和hashlib死活安装不上的解决方案
本文提供了Linux环境下离线安装Python时遇到的"ImportError: No module named _ssl"和"ERROR:root:code for hash md5|sha1|sha224|sha256|sha384|sha512 was not found"两个问题的解决方案,通过设置OpenSSL环境变量和编辑Python源码配置文件来解决。
18 1
|
17天前
|
Linux Python
Centos7安装Python虚拟环境之virtualenv
Centos7安装Python虚拟环境之virtualenv
|
17天前
|
Python
Python模块制作及安装
Python模块制作及安装