解決交叉編譯python3後無法找到zlib問題

2021-10-19 03:56:36 字數 3338 閱讀 1497

1.背景介紹:

嵌入式裝置測試,需要python環境移植到嵌入式中執行,所以需要交叉編譯python直譯器,並且交叉編譯部分三方庫或者直接在對應裝置環境中安裝三方庫。

伺服器需要安裝交叉編譯對應版本的python,並安裝對應的交叉編譯鏈,當前使用的編譯伺服器含有海思、聯詠多款板子的交叉編譯鏈,並編譯出可用的python直譯器。現在由於新增乙個安霸的裝置,需要對該裝置的python環境進行重新編譯。編譯引數均使用和以前一致,僅修改了編譯鏈很快就成功編譯出乙個python包。

2.遇見問題

在安霸裝置交叉編譯時,編譯成功後,安裝setuptools時遇到這個報錯,python環境中無法找到對應的zlib庫,有對應報錯出現:

編譯過程中也有對應報錯

且在編譯python時出現zlib缺失的提示

針對庫缺失的問題提出三種可能出現問題的設想:

1.裝置系統中缺失zlib

2.python直譯器沒有編譯zlib

3.交叉編譯鏈沒有對應zlib

1.在懷疑裝置系統中缺失zlib(不是這個原因,大家解決時候可以不看)

使用export 指令在板子上檢視了當前的環境變數,並檢視環境變數目錄下的具體庫檔案

在/usr/local/lib中找到對應的libz.so,並都有對應軟鏈結,所以系統中應該是有libz的庫

2.交叉編譯鏈中沒有對應zlib

搜尋網路上的類似情況,由於python直譯器遇到相同情況的大多數都是在linux伺服器下的編譯,大多數解決方案是install zlib 和zlib-devel ,在服務端事先安裝好zlib,所以檢視了編譯伺服器的這兩個環境是否有進行配置,

yum update

yum install -y zlib

yum install -y zlib-devel

( 沒有的可以這麼配置)

確認伺服器環境中已經有了zlib相關庫,再次進行編譯。依舊缺失zlib 【o(╥﹏╥)o】

懷疑是編譯過程中需要用對應編譯鏈編譯的libz.so,首先想到的其他交叉編譯鏈可以成功難道是因為編譯鏈中有對應的libz。

於是比對了當前編譯鏈和另乙個編譯鏈的lib和lib64,中間都沒有找到libz的庫,但是還是決定試一下,因為編譯了多個裝置的python直譯器

這一步已經編譯出所用編譯鏈對應的zlib庫

b,如果伺服器上沒有安裝zlib

./configure --prefix=/usr/local/zlib # 指定乙個其他編譯目錄

make &make install #

3.編譯python直譯器並使用對應的zlib庫

在已經有對應庫的時候,現在需要解決如何在編譯的過程中使用他。

a.–with-zlib

在網上時候查到./configure後有個引數–with-zlib=#zlib位址,將此選項加入編譯條件裡,發現沒有用,使用configure --help,發現在python3之後這個選項已經沒有了,所以python3並不是通過該方案指定zlib裡。

將原始碼最後一句取消遮蔽後再次進行編譯

1.編譯直譯器pgen,直譯器無需交叉編譯

./configure

make parser/pgen

成功的狀態是有編譯出praser/pgen

2.生成對應makefile和配置

mkdir build.amb #建立乙個目錄,存放生成的中間檔案和makefile,改目錄使用後可以刪除

/home/ambarella/python35_amb #建立存放最終結果的目錄

cd build.amb

…/configure

–host=aarch64-linux-gnu \ #對應編譯鏈

–build=x86_64-linux-gnu \ 對應平台

–target=aarch64-linux-gnu

–disable-ipv6

–prefix=/home/ambarella/python35_amb \ #指定儲存位置

–enable-shared

cc=aarch64-linux-gnu-gcc \ #編譯鏈

cxx=aarch64-linux-gnu-g++ \ #編譯鏈

–enable-optimizations

ac_cv_file__dev_ptmx=yes

ac_cv_file__dev_ptc=yes

3.複製直譯器

cp …/parser/pgen ./parser/ # 複製當前伺服器的解析器

touch -t 202112301000.00 parser/pgen #修改時間為今年最後一天

4.make

後面執行make時候遇到報錯沒有zlib.**件

所以找到解決方案,將我們之前交叉編譯的zlib包複製到目標路徑下,python編譯時會將目標路徑也作為乙個資源路徑

make clean

cp -rf /usr/local/zlib/* /home/ambarella/python35_amb

make #重新make

make install

中間的一些warning暫時不管,中間make時間有點長,需要好好等待一下

在我們移植了zlib後,得到的python編譯結果是zlib有找不到變成了通過makefike 安裝

在最後make install 之後生成的檔案python檔案如下:

如果遇到以下報錯

subprocess.calledprocesserror: command 『(『lsb_release』, 『-a』)』 returned non-zero exit status 1.

執行find / -name lsb_release

rm -rf /usr/bin/lsb_release

編譯安裝python3

centos 6預設安裝了 python2.x 的版本,安裝 python3 時,不要對 python2.x 做多餘的處理,很多程式仍然依賴 python2 環境。wget tmp 目錄下yum y install zlib devel bzip2 devel openssl devel ncurs...

CentOS編譯安裝Python3

最近想學一下一門新的高階語言,無意中看到用python仿aiphago的github專案,就決定是他了。aiphago的git傳送門 python官網 在系統選擇,也挑了乙個困難路線,裝在linux的系統,centos裡。也就不廢話了,下面正題。鍵入以下命令 yum install y openss...

centos編譯安裝python3

1.修改網絡卡配置檔案 vim etc sysconfig network script ifcfg eth0注 修改完之後,不要service network restart 重啟 reboot 2.開機後 ping www.baidu.com如果成功進行下一步,否則重複步驟1 5.上傳完之後 在...