Qt ./应用程序名称:无法执行二进制文件:Exec格式错误

Qt ./应用程序名称:无法执行二进制文件:Exec格式错误,qt,ubuntu,raspberry-pi,Qt,Ubuntu,Raspberry Pi,我已经在我的64位Ubuntu机器上用QT编译了一个应用程序。我需要将该应用程序放在运行32位Raspbian Stretch的Raspberry Pi中。但是,当我使用命令/app\u name运行我的应用程序(app\u name)时,它会输出无法执行二进制文件:Exec format error。我在互联网上搜索到,这是因为我在64位机器上编译了这个程序,所以它在32位机器上无法工作。这是唯一的情况,还是我需要在与raspbian相同的架构中编译程序?或者,如果我下载一个32位版本的Ubu

我已经在我的64位Ubuntu机器上用QT编译了一个应用程序。我需要将该应用程序放在运行32位Raspbian Stretch的Raspberry Pi中。但是,当我使用命令
/app\u name
运行我的应用程序(app\u name)时,它会输出
无法执行二进制文件:Exec format error
。我在互联网上搜索到,这是因为我在64位机器上编译了这个程序,所以它在32位机器上无法工作。这是唯一的情况,还是我需要在与raspbian相同的架构中编译程序?或者,如果我下载一个32位版本的Ubuntu并在将其传输到Raspberry Pi之前在那里编译该程序,它会起作用吗?

您需要使用一个编译器和链接器来构建该程序,该编译器和链接器的目标架构与Raspberry Pi相同。也就是说,它应该是特定CPU(或至少是CPU范围)的编译器,支持相同的ABI(应用程序二进制接口)和相同的位宽度

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

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

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


如果您真的需要交叉编译,那么使用一些包含完整工具链的Docker图像可能会更容易——web搜索应该会显示这些图像。从头开始组装完整的工具链,特别是当您有复杂的依赖项时,这是一项非常重要的任务。

您所做的不是部署。编译后,您不能期望该二进制文件在每个linux平台上都能工作。您需要部署它