ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux – 为什么在尝试运行此可执行文件时出错?

2019-07-11 16:00:41  阅读:248  来源: 互联网

标签:linux cx-freeze nuitka


我正在尝试将python 3应用程序部署到带有armv7架构的嵌入式Linux(Yocto)机器上.由于包装有限,我正在我的覆盆子pi(具有相同的armv7架构)上创建一个带有cx-freeze的独立文件.现在,如果我尝试在目标计算机上运行创建的二进制文件,我会收到一个错误,指示源是为另一个平台编译的:

root@target:/media/sda/dist# ./helloworld
-sh: ./helloworld: No such file or directory

此可执行文件适用于构建计算机.

我已经将file-command的输出与在目标机器上运行的另一个应用程序进行了比较:

这是不起作用的文件:

root@target:/media/sda/dist# file helloworld
helloworld: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=99b2ae19f1e65dc26b6fd7d8b1dbc83f974830bd, stripped

这是另一个在目标机器上工作的二进制文件:

root@target:/usr/bin# file demo-application
demo-application: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, BuildID[sha1]=bd6660c43d9e98c59dfa8b16eb26277aa4f19949, stripped

唯一的区别似乎是所需的最低内核版本,但是uname显示实际版本是3.0.35:

root@target:/media/sda/dist# uname -a
Linux Target-Machine 3.0.35-Yocto-21.0-r5061-0-svn2437 #1 PREEMPT Fri Jun 19 21:40:10 CEST 2015 armv7l GNU/Linux

树莓派生成机器的uname输出:

pi@raspberrypi ~/py/helloworld $uname -a
Linux raspberrypi 3.18.11-v7+ #781 SMP PREEMPT Tue Apr 21 18:07:59 BST 2015 armv7l GNU/Linux

我在这做错了什么?它应该不是实际的python代码或依赖项的问题,我尝试使用一个非常简单的helloworld应用程序与一行代码.

编辑

在构建机器上输出ldd命令(使用nuitka创建的exe):

pi@raspberrypi ~/py/helloworld/helloworld.dist $ldd helloworld.exe
    /usr/lib/arm-linux-gnueabihf/libcofi_rpi.so (0x76faf000)
    libdl.so.2 => /home/pi/py/helloworld/helloworld.dist/./libdl.so.2 (0x76fa4000)
    libpython3.2mu.so.1.0 => /home/pi/py/helloworld/helloworld.dist/./libpython3.2mu.so.1.0 (0x76ccf000)
    libstdc++.so.6 => /home/pi/py/helloworld/helloworld.dist/./libstdc++.so.6 (0x76bfd000)
    libm.so.6 => /home/pi/py/helloworld/helloworld.dist/./libm.so.6 (0x76b8c000)
    libgcc_s.so.1 => /home/pi/py/helloworld/helloworld.dist/./libgcc_s.so.1 (0x76b64000)
    libc.so.6 => /home/pi/py/helloworld/helloworld.dist/./libc.so.6 (0x76a33000)
    /lib/ld-linux-armhf.so.3 (0x76fbc000)
    libz.so.1 => /home/pi/py/helloworld/helloworld.dist/./libz.so.1 (0x76a15000)
    libexpat.so.1 => /home/pi/py/helloworld/helloworld.dist/./libexpat.so.1 (0x769ec000)
    libpthread.so.0 => /home/pi/py/helloworld/helloworld.dist/./libpthread.so.0 (0x769cd000)
    libutil.so.1 => /home/pi/py/helloworld/helloworld.dist/./libutil.so.1 (0x769c2000)

编辑2

我尝试使用nuitka编译python代码并使用以下命令创建一个独立的应用程序:

nuitka –standalone –recurse-all helloworld.py

它生成一个可执行的helloworld.exe文件以及所有已编译的库文件(.so).
但是,在目标机器上,当我尝试运行它时,我仍然得到:

root @ target:〜/ helloworld / helloworld.dist#./ helloworld.exe
-sh:./ helloworld.exe:没有这样的文件或目录

不幸的是,我无法在目标机器上运行ldd或readelf命令,因为它们的包丢失了.

编辑3

它似乎真的缺少一些图书馆.出于实验目的,我将ld-linux-armhf.so.3从raspi复制到嵌入式系统,它显示了一个不同的错误(缺少另一个库).我认为另一个问题是raspberry pi使用hardfloat(armhf)而嵌入式系统使用softfloat ..我不认为我可以通过这种方式工作.

编辑4
我现在正在使用另一个平台和操作系统,一切正常,所以这个问题不再适用于我.

解决方法:

在目标计算机上运行此命令:

chmod +x helloworld

它使您的文件可执行.

标签:linux,cx-freeze,nuitka
来源: https://codeday.me/bug/20190711/1433819.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有