ubuntu22.04 无法编译python3.5提示[Makefile:1048: install] Error 139

编译打包和其他
回复
头像
eremiter
帖子: 75
注册时间: 2017-04-22 19:12
系统: Ubuntu22
送出感谢: 1 次
接收感谢: 1 次

ubuntu22.04 无法编译python3.5提示[Makefile:1048: install] Error 139

#1

帖子 eremiter » 2022-10-31 11:01

环境:ubuntu22.04 的openssl 版本3.0 ,python3.5用不了,所以安装openssl1.

安装环境库

代码: 全选

sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
sudo apt-get install build-essential libncursesw5-dev libgdbm-dev libc6-dev
sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
sudo apt-get install libssl-dev openss1
sudo apt-get install libffi-dev
sudo apt-get install libxpm-dev libxext-dev
sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-dev libffi-dev libc6-dev 
步骤:安装openssl-1.1.1
下载
https://www.openssl.org/source/

代码: 全选

wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz

tar -zxvf  openssl-1.1.1q.tar.gz
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl
或
./Configure --prefix=/usr/local/ssl --openssldir=/usr/local/ssl
sudo make && make install
设置openssl1
sudo mv /usr/bin/openssl /usr/bin/openssl3 # 备份原来
sudo mv /usr/include/openssl /usr/include/openssl3 # 备份原来

sudo ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
sudo ln -s /usr/local/ssl/include/openssl /usr/include/openssl
sudo echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig -v

设置环境变量
vi /etc/profile
export PATH=$PATH:/usr/local/ssl/bin
# gcc 编译器找到头文件(xx.h)的路径,写C++程序一般都不会用到gcc,所以这个可以忽略不写
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/ssl/include
# g++ 编译器找到头文件(xx.h/hpp)的路径
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/openssl/include
# 找到静态库(xx.a)的路径
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/ssl/lib
# 找到动态链接库(xx.so)的路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ssl/lib
source /etc/profile

////////////////////编译python3.5/////////////////////////
wget https://mirrors.huaweicloud.com/python/ ... 3.5.10.tgz
tar zxvf Python-3.5.10.tgz
sudo make clean && sudo make distclean
./configure --prefix=/usr/local/python35 --with-openssl
sudo make && sudo make install



报错

代码: 全选

rm -f /usr/local/python35/bin/pyvenv
(cd /usr/local/python35/bin; ln -s pyvenv-3.5 pyvenv)
if test "x" != "x" ; then \
        rm -f /usr/local/python35/bin/python3-32; \
        (cd /usr/local/python35/bin; ln -s python3.5-32 python3-32) \
fi
rm -f /usr/local/python35/share/man/man1/python3.1
(cd /usr/local/python35/share/man/man1; ln -s python3.5.1 python3.1)
if test "xupgrade" != "xno"  ; then \
        case upgrade in \
                upgrade) ensurepip="--upgrade" ;; \
                install|*) ensurepip="" ;; \
        esac; \
         ./python -E -m ensurepip \
                $ensurepip --root=/ ; \
fi
Segmentation fault (core dumped)
[b]make: *** [Makefile:1048:install] 错误 139
[/b]

==============================
修改 python3.5.10/Moudle/Setup 注释下面行
# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto

修改 python3.5.10/Makefile.pre 和 python3.5.10/ Makefile.pre
73行左右,把 3 改为2
把 # Compiler options
OPT= -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes
改为

代码: 全选

# Compiler options
OPT=		-DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes
重新 make && make install
还是相同的错误,如果Setup 不把ssl注释,错误1049错误,即

代码: 全选

if test "xupgrade" != "xno"  ; then \
        case upgrade in \
                upgrade) ensurepip="--upgrade" ;; \
                install|*) ensurepip="" ;; \
        esac; \
         ./python -E -m ensurepip \
                $ensurepip --root=/ ; \
fi
Segmentation fault (core dumped)
[b]make: *** [Makefile:1049:install] 错误 139[/b]
=================================================
ubuuntu22在id 1000用户(安装创建的第一个用户)下编译,加了sudo make && sudo make install 也会提示创建权限不足/usr/local,干脆在root下编译,这个是小问题,问题是无法编译通过,从而无法创建虚拟环境

python35 -m venv pyenv35
=================================================
真搞糊涂了,还有我的环境变量如下,有没有冲突,或覆盖原有的

代码: 全选

export PGHOME=/usr/local/pgsql

export PGDATA=/usr/local/pgsql/data
export PGPORT=5432
export PGUSER=postgres
export PATH=$PGHOME/bin:$PATH:$HOME/bin
export LD_LIBRARY_PATH=/usr/local/pgsql/lib


# 在PATH中,找到程序可执行文件的路径。
export PATH=$PATH:/usr/local/ssl/bin
# gcc 编译器找到头文件(xx.h)的路径,写C++程序一般都不会用到gcc,所以这个可以忽略不写
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/ssl/include
# g++ 编译器找到头文件(xx.h/hpp)的路径
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/openssl/include
 # 找到静态库(xx.a)的路径
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/ssl/lib
# 找到动态链接库(xx.so)的路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ssl/lib

////////////Segmentation fault (core dumped)出错原因及位置分析////////////////
https://blog.csdn.net/qq_39666638/artic ... s/77099284
看不出是哪个core出问题

代码: 全选

ulimit -c unlimited
 ulimit -a | grep 'core file size'
core file size              (blocks, -c) unlimited
Python-3.5.10# find ./ -name core*
./Lib/distutils/core.py
./Lib/distutils/__pycache__/core.cpython-35.pyc
./Tools/msi/bundle/packagegroups/core.wxs
./Tools/msi/core
./Tools/msi/core/core_d.wxs
./Tools/msi/core/core.wxs
./Tools/msi/core/core_pdb.wixproj
./Tools/msi/core/core_en-US.wxl
./Tools/msi/core/core.wixproj
./Tools/msi/core/core_pdb.wxs
./Tools/msi/core/core_files.wxs
./Tools/msi/core/core_d.wixproj
/////////////////不知 pdb 怎么调试 ////////////////////

代码: 全选

ls -lha /var/lib/apport/coredump
总用量 25M
drwxr-xr-x 2 root root 4.0K 10月 31 12:28 .
drwxr-xr-x 3 root root 4.0K 10月 30 11:50 ..
-r-------- 1 root root  13M 10月 31 12:22 core._home_postgres_Python-3_5_10_python.0.aa57cdf0-ae27-4b31-8367-847deb80ed5d.138945.1002251
-r-------- 1 root root  13M 10月 31 12:28 core._home_postgres_Python-3_5_10_python.0.aa57cdf0-ae27-4b31-8367-847deb80ed5d.144663.1035031
===========================================
经过1天的研究,到处查资料,到处问没人回答,通过自己排列组合,不断尝试,终于成功,但道理仍不明白

1. config 如有错误,是否要clean
2. make 或 make install 有错误,是否要重新 clean,重新 config
3. --with-openssl 和 Moudles/Setup 注释到 SSL=/usr/local/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
也有路径,有何不同,哪个为准
4. OPT= -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes 其中的 O2 和 O3 是什么意思
5. 如何调试coredump,C语言不懂
上次由 eremiter 在 2022-10-31 21:49,总共编辑 1 次。
头像
astolia
论坛版主
帖子: 5968
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 1037 次

Re: ubuntu22.04 无法编译python3.5提示[Makefile:1048: install] Error 139

#2

帖子 astolia » 2022-10-31 17:03

eremiter 写了:
2022-10-31 11:01
环境:ubuntu22.04 的openssl 版本3.0 ,python3.5用不了,所以安装openssl1.
干嘛非要用3.5版,源里的3.10有什么不对吗?3.5寿终正寝都两年了还不让人入土?
eremiter 写了:
2022-10-31 11:01
ubuuntu22在id 1000用户(安装创建的第一个用户)下编译,加了sudo make && sudo make install 也会提示创建权限不足/usr/local,干脆在root下编译,这个是小问题,问题是无法编译通过,从而无法创建虚拟环境
这可不是什么小问题。基本的用户权限都有问题,谁知道你装的系统中还有多少坑。
还有postgresql安装时也会建立一个名为postgres的用户,你把自己的用户名也弄成这个,会不会造成其他问题我也不清楚,但反正你已经遇到了些别人都不会遇到的破事了。
头像
eremiter
帖子: 75
注册时间: 2017-04-22 19:12
系统: Ubuntu22
送出感谢: 1 次
接收感谢: 1 次

Re: ubuntu22.04 无法编译python3.5提示[Makefile:1048: install] Error 139

#3

帖子 eremiter » 2022-10-31 21:51

astolia 写了:
2022-10-31 17:03
eremiter 写了:
2022-10-31 11:01
环境:ubuntu22.04 的openssl 版本3.0 ,python3.5用不了,所以安装openssl1.
干嘛非要用3.5版,源里的3.10有什么不对吗?3.5寿终正寝都两年了还不让人入土?
eremiter 写了:
2022-10-31 11:01
ubuuntu22在id 1000用户(安装创建的第一个用户)下编译,加了sudo make && sudo make install 也会提示创建权限不足/usr/local,干脆在root下编译,这个是小问题,问题是无法编译通过,从而无法创建虚拟环境
这可不是什么小问题。基本的用户权限都有问题,谁知道你装的系统中还有多少坑。
还有postgresql安装时也会建立一个名为postgres的用户,你把自己的用户名也弄成这个,会不会造成其他问题我也不清楚,但反正你已经遇到了些别人都不会遇到的破事了。
我是编译,为了方便,直接使用postgres用户,按理用户名不会出很多毛病,也许是这样原因,编译是做成功,费了九牛二虎之力,太痛苦了
头像
astolia
论坛版主
帖子: 5968
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 1037 次

Re: ubuntu22.04 无法编译python3.5提示[Makefile:1048: install] Error 139

#4

帖子 astolia » 2022-11-01 12:14

eremiter 写了:
2022-10-31 21:51
我是编译,为了方便,直接使用postgres用户,按理用户名不会出很多毛病,也许是这样原因,编译是做成功,费了九牛二虎之力,太痛苦了
看你好像是在虚拟机里安装的?如果你用了虚拟机的无人职守安装方式,也可能出这种问题。
头像
eremiter
帖子: 75
注册时间: 2017-04-22 19:12
系统: Ubuntu22
送出感谢: 1 次
接收感谢: 1 次

Re: ubuntu22.04 无法编译python3.5提示[Makefile:1048: install] Error 139

#5

帖子 eremiter » 2022-11-01 21:28

astolia 写了:
2022-11-01 12:14
eremiter 写了:
2022-10-31 21:51
我是编译,为了方便,直接使用postgres用户,按理用户名不会出很多毛病,也许是这样原因,编译是做成功,费了九牛二虎之力,太痛苦了
看你好像是在虚拟机里安装的?如果你用了虚拟机的无人职守安装方式,也可能出这种问题。
有虚拟机,有实体机,也有wls子系统,不折腾了,谢谢热心人
回复