./app_name:无法执行二进制文件:Exec格式错误

时间:2020-09-04 10:03:52

标签: qt ubuntu raspberry-pi

我已经在我的64位Ubuntu计算机中使用QT编译了一个应用程序。我需要将该应用程序放入运行32位Raspbian Stretch的Raspberry Pi中。但是,当我使用命令./app_name运行我的应用程序(app_name)时,它会输出cannot execute binary file: Exec format error。我在互联网上搜索这是因为我在64位计算机上编译了该程序,因此无法在32位计算机上运行。那是唯一的情况还是我需要在与raspbian相同的体系结构中编译程序?还是如果我下载32位版本的Ubuntu并在将其传输到Raspberry Pi之前在那里编译了程序,它会工作吗?

1 个答案:

答案 0 :(得分:0)

您需要使用针对Raspberry Pi相同体系结构的编译器和链接器来构建程序。也就是说,它应该是用于特定CPU(或至少是CPU范围)的编译器,并支持相同的ABI(应用程序二进制接口)和相同的位宽。

实际上,这意味着为Ubuntu计算机获取和配置与Pi兼容的ARM工具链,或在Pi本身上构建程序。如果采用工具链方法,则可能必须获取应用程序使用的任何依赖项(库)的Pi版本。

Pi的交叉编译是一项相当专业的任务,例如ARM Android的交叉编译(在某种程度上可以使用相同的工具)。

以我的经验,在Pi上构建几乎总是更容易。安装编译器和构建工具通常是运行“ apt-get”或类似的事情,并且您的应用程序需要的任何依赖关系都已经符合正确的规范。现代的Pi模型速度足够快,甚至可以在板上编译大量的应用程序。除非您有特殊原因要从其他系统进行交叉编译,否则通常在板上构建会更容易。

如果确实需要交叉编译,则使用某些包含完整工具链的Docker映像可能会更容易-网络搜索应将其显示出来。从头开始组装完整的工具链,尤其是如果您具有复杂的依赖关系时,这并非易事。