導航:首頁 > 源碼編譯 > python交叉編譯

python交叉編譯

發布時間:2022-01-25 04:30:18

『壹』 交叉編譯後的python 怎麼使用第三方庫

直接編譯即可,缺少依賴會有提示,按提示安裝即可。如果是自己編譯的庫文件,需要單獨指明,方法與一般編譯都一致。

『貳』 本人對python一竅不通,出於好奇,將最新的python3.2交叉編譯弄到安卓上,憑借linux

你安裝時的目錄是否有改變? 提示說找不到相應的目錄了。

『叄』 如何交叉編譯Python到ARM-Linux平台

cd /usr/local/src/sudo wget http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.bz2
sudo chmod 777 Python-3.3.2.tar.bz2
sudo tar -jx -f Python-3.3.2.tar.bz2# 安裝
cd Python-3.3.2/./configure --prefix=/usr/local/Python-3.3.2/sudo make
sudo make install

『肆』 Python交叉編譯失敗怎麼回事

1、在源碼 python2.7.3/Moles/Setup.dist 搜索zlib ,打開該模塊
2、繼續下去,又提示缺少zlib.h,也就是我們的交叉編譯庫中缺少zlib頭文件和庫文件
3、在http://www.zlib.net/ 下載zlib源碼,交叉編譯zlib
由於zlib 編譯不支持--host選項,所以在zlib目錄下執行如下命令
~/zlib1.2.8/# mkdir _install
~/zlib1.2.8/#CC=arm-xxxxx(你的交叉編譯器) ./configure --host=./_install(最好是絕對路徑,我偷懶了,這個是安裝目錄)
~/zlib1.2.8/# make && make install
你會在_install目錄下發現include 和 lib 目錄
下一步,我們回到第1步
為了防止交叉編譯鏈污染,我們在python目錄下創建otherinclude otherlib
把zlib下的include和lib下的內容分別按照對應名字拷貝過來
4.在Moles/setup 找到我們前面setup.dist那句話,添加 -L../otherlib -I../otherinclude 這個應該都懂的
直接make
5,如果你之前make distclean過了,沒有setup文件,請修改setup.dist.文件,重新configure!

『伍』 python用什麼處理器開發

那得看你處理器對應的交叉編譯器,支持不支持Python編譯。現在很多的處理器是不支持的。但是樹莓派,我覺得不能算是嵌入式了,而是一個迷你電腦,它就能夠使用Python編程

『陸』 如何交叉編譯Python到ARMLinux平台 / 藍訊

步驟一:部署protoc.exe
1)sudo su ---進入管理模式
//以下操作切換至protobuf文件夾
2)。/configure
3)make
4)make check
5)make install
此時可以查看protobuf文件夾下面的makefile文件,可以查看-build表示的本機環境以及-host表示的編譯庫的運行環境
我本地的-build=x86_64-apple-darwin12.3.0
-host=x86_64-apple-darwin12.3.0
(這兩個參數在後續配置腳本需要用到,與後面腳步的i686-apple-darwin12.3.0以及arm-apple-darwin12.3.0後綴「arm-apple-darwin12.3.0」保持一致)
6)make distclean清理已生成的makefile,為交叉編譯配置新makefile做准備

『柒』 如何編譯可以在Windows下運行的帶有Python支持的ARM Linux GDB

距離上次我編譯這種GDB的時間轉眼過了3年,現在(2017年3月6日),Linaro編譯器已經支持python了。不過,當我們自己使用的時候還是有一些麻煩的,因為Linaro編譯器的sysroot和平時我們用的sysroot還是不一樣的,需要在gdbinit文件裡面用"set sysroot"或"set solib-search-path"之類設定路徑。生在獅子座長成座的我,是無法容忍這種麻煩的,所以還是自己來弄一次。
還是在Linux下做MinGW的交叉編譯,需要MinGW交叉編譯器。

因為Linaro已經做了很多事情了,源碼,expat,python都搞定了,資源如下:
Linaro GDB git:

從這上面找到與Linaro編譯器版本對應的源碼
編譯用的expat和python:

編譯的時候只需要設定一個環境變數:
export PYTHON_MINGW=/home/c/gdb-arm/python-2.7.4-mingw32
然後配置一下就行了:
./configure --host=i586-mingw32msvc --target=arm-linux-gnueabihf --with-libexpat-prefix=/home/c/gdb-arm/expat-2.1.0-1 --without-libunwind-ia64 --without-libunwind-ia64 --without-lzma --with-python=/home/c/gdb-arm/python-2.7.4-mingw32 --without-guile --without-babeltrace --with-sysroot=/opt/sysroot-arm
然後就可以:
make
make DESTDIR= install

『捌』 有哪位大神嵌入式ARM中移植python的庫,求助啊

我沒弄過ubuntu下的graphics.py。
但是弄過windows下的。

1. apt是用來安裝Ubuntu系統的軟體的。
2. Python是Ubuntu下面的一個軟體。
3. 而graphics.py屬於python中的第三方庫函數。

所以,即使用apt,也是用apt去安裝,更新python。
而python中的庫,有自己的安裝方法。
常見的是直接 setup.py install或者用pip之類的去安裝。

具體安裝的方法,自己去參考這個:
【待完善】【總結】Python安裝第三方的庫、package的方法

(此處不給貼地址,請用搜標題,即可找到帖子地址)

『玖』 如何交叉編譯Python到ARM-Linux平台

編譯sqlite

先去 http://www.sqlite.org/download.html 下載最新的sqlite源代碼,我這里用的是3.5.6版本的。

我推薦使用amalgamation版本的源代碼,這個代碼只有幾個文件而已,編譯起來方便,而且據說 編譯器好的話,還可能編譯出更高效的代碼。 我下載的是

[plain]
view plain

http://www.sqlite.org/sqlite-amalgamation-3.5.6.tar.gz

先運行以下幾步:

[plain]
view plain

tar zxf sqlite-amalgamation-3.5.6.tar.gz
cd sqlite-3.5.6
./configure --host=arm-linux --prefix=/usr/local/arm/3.3.2 --enable-shared --disable-readline --disable-dynamic-extensions

以上是把sqlite解壓縮,然後做一些配置,這里,我希望sqlite到時候安裝到/usr/local/arm/3.3.2里,要生成動態鏈接庫,不要readline,不要sqlite的動態擴展。

然後編輯Makefile,把CFLAG和CXXFLAG中的-g去掉,我們不用debug sqlite。

接下來就可以編譯和安裝sqlite了:

[plain]
view plain

make
make install

這一步就完成了sqlite的編譯和安裝了。

編譯python

先去http://www.python.org/download/下載最新版本的python源代碼,我這里下載的是:

[plain]
view plain

http://www.python.org/ftp/python/2.5.1/Python-2.5.1.tar.bz2

先把python解壓縮:

[plain]
view plain

tar jxf Python-2.5.1.tar.bz2
cd Python-2.5.1

編譯pc版本的語法解析器

由於在編譯python的時候,需要先編譯一個叫pgen的程序出來,用於生成語法解析器,所以我們要先生成一個pc版本的pgen:

[plain]
view plain

mkdir build.pc
cd build.pc
../configure
make Parser/pgen

然後ls Parser一下,應該就能看到有pgen了。

修改configure

configure在檢測編譯器的printf是否支持%zd的時候,如果發現是在cross compile,就直接不幹活了。這還了得?

把這一部分的檢測代碼去掉。這段代碼起始於

[plain]
view plain

echo "$as_me:$LINENO: checking for %zd printf() format support" >&5
echo $ECHO_N "checking for %zd printf() format support... $ECHO_C" >&6
if test "$cross_compiling" = yes; then

結束於

[plain]
view plain

cat >>confdefs.h <<\_ACEOF
#define PY_FORMAT_SIZE_T "z"
_ACEOF

else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5

( exit $ac_status )
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi

把這兩段以及中間的內容都刪除掉就可以了。

編譯arm版本的python

有了語法解析器,就可以開始編譯arm版本的python了。

[plain]
view plain

mkdir ../build.arm
cd ../build.arm
../configure --prefix=/home/leojay/test/arm-system-working/rootfs --disable-ipv6 --host=arm-linux --enable-shared

先創建一個用於編譯的目錄build.arm,再對python做一些配置,如安裝目錄,不要ipv6,使用arm-linux的編譯器,生成動態鏈接庫。

修改Makefile

之後就要對Makefile做一些修改,把

[plain]
view plain

OPT= -DNDEBUG -g -O3 -Wall -Wstrict-prototypes

一行中,去掉-g,我們不要debug python,-O3改為-O2,空間緊張O2就可以了。



[plain]
view plain

PGEN= Parser/pgen$(EXE)

一行的下面加上

[plain]
view plain

PGEN_HOST= ../build.pc/Parser/pgen$(EXE)

表明我們在HOST上運行的pgen

在要使用PGEN的地方改為PGEN_HOST:

[plain]
view plain

$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
-$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)

改為:

[plain]
view plain

$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
-$(PGEN_HOST) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)

修改所有使用新生成的python的地方。

所有如 ./$(BUILDPYTHON) 的地方,都改為python

如:

[plain]
view plain

platform: $(BUILDPYTHON)
$(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform

改為

[plain]
view plain

platform: $(BUILDPYTHON)
$(RUNSHARED) python -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform

這種地方比較多,大家小心修改。

修改setup.py

setup.py負責編譯python的各個擴展模塊。但是,由於python完全沒有考慮cross compile,所以要做一些修改。

PyBuildExt類:

函數的前兩行是把/usr/local加到搜索目錄中,我們的cross compiler一般不會直接安裝在 /usr/local裡面的,所以這兩行去掉:

[plain]
view plain

lib_dirs, inc_dirs的設定中,把中括弧里的那些都去掉。 以下所有模塊都不要:
這個函數在編譯了所有的extension後,會去load這些剛編譯好的extension, 但我們在i686的電腦上顯然不能load,所以要跳過這些操作。 在 build_ext.build_extension(self, ext)後面直接寫一個return,不做load。
for d in ['/usr/local/arm/3.3.2/include']
for d in inc_dirs + sqlite_inc_paths:
ssl, openssl, bdb, dbm, termios, nsl, ncurses, bz2, linuxaudiodev, ossaudiodev, tkinter
add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
build_extension函數:
detect_moles函數:
cmath, ctypes, _testcapi, pwd, grp, spwd, mmap, audioop, imageop, rgbimg, readline,

[plain]
view plain

由於python本身的問題,現在ctypes還不能在除i386以外的機器上運行,所以ctypes也去掉 編譯sqlite的地方:

[plain]
view plain

改為:

[plain]
view plain

因為我的sqlite3安裝在這里,如果這里不改的話,setup.py會在我的電腦上找sqlite

main函數:
setup函數調用的時候,把要安裝的scripts那一部分去掉

之後就可以make && make install了。

附上我修改後的 Makefile 和 setup.py 供大家參考

裁減python

python完全安裝後,實在是很大,所以,要把一些肯定用不上的庫去掉。 所以,再附上我的裁減腳本 cleanpy.sh

注意,由於我的python程序都運行在python -OO的參數下,所有的.py和.pyc都不需要, 只要有.pyo就可以了。所以,這個腳本會把所有的.py和.pyc都刪除掉。

大家可以根據自己的需要做調整。

閱讀全文

與python交叉編譯相關的資料

熱點內容
windows命令打開文件 瀏覽:483
php個人簡歷模板 瀏覽:911
sshkeygenlinux 瀏覽:655
java包的創建 瀏覽:682
vlog用什麼app可以拍長視頻 瀏覽:578
安卓手機為什麼總是出現藍屏 瀏覽:255
u盤超級加密3000加密後 瀏覽:879
sql插入數據命令 瀏覽:470
u盤根目錄文件夾是哪個 瀏覽:693
新預演算法預算編制 瀏覽:622
perl怎樣遍歷文件夾 瀏覽:636
安卓手機如何更好的保護隱私 瀏覽:316
程序員書籍知乎 瀏覽:154
王者安卓v區怎麼轉移到蘋果 瀏覽:449
加密區卸載 瀏覽:122
女程序員壓力大想辭職 瀏覽:681
演算法體現在哪裡 瀏覽:219
阿里雲個人伺服器推薦 瀏覽:363
汽車識別視頻文件夾 瀏覽:110
檔案伺服器不可用是什麼意思 瀏覽:525