交叉编译Python

交叉编译Python

我正在使用带有运行 Openembedded 的 ARM926EJ-S 的评估板,并且我想在其上安装 python。

我在 Fedora 25 上使用 linaro 工具链 (releases.linaro.org/components/toolchain/binaries/6.2-2016.11/) 成功交叉编译了 python 2.7.13,如下所示:

CONFIG_SITE=config.site ./configure --build=x86_64-linux-gnu --host=arm-linux-gnueabihf --disable-ipv6 --enable-unicode=ucs4

我必须做一个 config.site 因为在编译过程中它要求我精确:

ac_cv_file__dev_ptmx=no/yes
ac_cv_file__dev_ptc=no/yes

我像这个人一样对他们俩说“不”:datko.net/2013/05/10/cross-compiling-python-3-3-1-for-beaglebone-arm-angstrom/

然后我测试添加:

--host=arm-elf-linux

因为它适用于另一个库(pjsip),但不幸的是它不起作用,所以我找到了这个解决方案:

--host=arm-unknown-linux-gnueabihf

这里:github.com/jedisct1/libsodium/issues/274

这是因为配置过程中出现错误,要求我这样做:

--desable-ipv6

然后配置顺利,于是make。为了进行 make install,因为我必须将它安装在我的板上,所以我做了:

make install DESTDIR=root@IP_ADRESS

这也有效,python安装在root@IP_ADRESS/usr/local/lib/python2.7中。

但我在我的板上找不到它,也无法启动 python shell。

所以我尝试这个:

export LD_LIBRARY_PATH="/lib:/usr/lib:/usr/local/lib"

就像这里回答的那样:stackoverflow.com/questions/4743233/is-usr-local-lib-searched-for-shared-libraries

这不会改变任何东西,我发现 /usr/local/lib 不存在...而且我发现我的 pjsip lib 也没有安装...

你知道我的库去哪儿了吗?我该如何使用它们?

谢谢 !

编辑 :

事实上,当您这样做时找到了解决方案:

make install DESTDIR=root@IP_ADRESS

它不会将其安装到 root@IP_ADRESS,但它会创建一个名为“root@IP_ADRESS”的文件夹...

所以我 tar.bz2 这个文件夹中包含的所有文件,用 scp 将它们发送到我的主板上,并复制我的主板的 /usr/ 中的所有文件夹和文件。

但是当我尝试启动 python 时,它无法正常工作:

~# python
-sh: /usr/bin/python: cannot execute binary file

是因为在配置部分,--host 不是好的那个吗?

答案1

我找到了解决方案。我使用的板是集成 OMAPL138 (ARM926EJ-S + DSP) 的 TMDSLCDK138。

对于那些尝试为该板交叉编译 Python 2.7 并运行 Arago SDK 的人来说,这就是方法!我正在使用 Ubuntu 16.04。

首先安装Arago工具链:

不是这个:http://software-dl.ti.com/sdoemb/sdoemb_public_sw/arago_toolchain/2011_09/index_FDS.html (因为它已被弃用!)

但其中的一个mcsdk_1_01_00_02_setuplinux.bin

wget http://software-dl.ti.com/sdoemb/sdoemb_public_sw/mcsdk/latest1/exports/mcsdk_1_01_00_02_setuplinux.bin
chmod +x mcsdk_1_01_00_02_setuplinux.bin
sudo ./mcsdk_1_01_00_02_setuplinux.bin

我将其安装在/opt/ti/.

然后:

cd /opt/ti/mcsdk_1_01_00_02
chmod +x linux-devkit.sh
sudo ./linux-devkit.sh

它会问你想安装在哪里,我保留了/usr/local/arago.2013-05/

现在做:

cd /usr/local/arago-2013.05/
. ./environment-setup

通常你的 shell 会“转变”并且你的命令行将执行以下命令:

[linux-devkit]:/usr/local/arago-2013.05/>

好了,到这里你就完成了 GOOD Arago 工具链的安装。

现在交叉编译并安装Python:

我在这个 shell 中执行了所有其他命令linux-devkit

wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz
tar -Jxvf Python-2.7.13.tar.xz
cd Python-2.7.13/

现在创建一个名为的文件config.site(因为如果不这样做,则会出现错误要求您这样做):

touch config.site
gedit config.site

在此文件中添加这两行:

ac_cv_file__dev_ptmx=no
ac_cv_file__dev_ptc=no

现在你可以./configure这样做:

CONFIG_SITE=config.site ./configure --host=arm-arago-linux --prefix=/home/YOUR_USER/MY_BOARD_python --build=x86_64-linux-gnu --disable-ipv6
make
make install

现在你只需要将 MY_BOARD_python 文件夹压缩scp到你的主板上:

tar -jcvf MY_BOARD_python.tar.bz2 MY_BOARD_python/
scp MY_BOARD_python.tar.bz2 root@IP_ADRESS:~/

现在在你的板上:

tar -jxvf MY_BOARD_python.tar.bz2
cp -R MY_BOARD_python/* /usr/

现在如果你输入Python:

root@omapl138-lcdk:~# python
Python 2.7.13 (default, Feb 23 2017, 16:37:33) 
[GCC 4.5.3 20110311 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> HURAYY!!

希望这会有所帮助!

答案2

--host=arm-linux-gnueabihf

hf 这里代表硬件浮点支持 ARM926EJ-S 不支持硬件浮点操作。生成的二进制文件无法在目标板上执行。

请参阅相关问题: 如何判断Linux主板是否使用硬件FPU?

相关内容