在BeagleBone Black(Debian 8.7 Jessie)运行Ubuntu编译C++程序报错求助
解决BeagleBone Black上运行Ubuntu编译程序的"Exec format error"问题
这个错误本质是你在Ubuntu x86/x86_64架构上编译的C++程序,和BeagleBone Black的ARM架构不兼容——就像给Windows装Mac专属软件,肯定跑不起来。下面是具体的排查和解决步骤:
先确认架构不匹配的问题
- 在你的Ubuntu机器上,打开终端运行:
file ./program,输出会显示程序的目标架构(比如ELF 64-bit LSB executable, x86-64) - 在BeagleBone Black上运行:
uname -m,输出应该是armv7l(对应ARM Cortex-A8架构) - 对比两者,就能明确是架构差异导致的错误。
解决方案1:交叉编译(推荐,适合频繁开发)
交叉编译就是在x86机器上生成ARM架构的可执行文件,步骤如下:
- 安装ARM交叉编译工具链
在Ubuntu终端执行:sudo apt-get update sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf - 配置Eclipse使用交叉编译器
- 打开你的Eclipse项目,右键选择
Properties-> 进入C/C++ Build->Settings - 在
Tool Settings标签页,把GCC C++ Compiler的命令改成arm-linux-gnueabihf-g++ - 同样,把
GCC C++ Linker的命令也改成arm-linux-gnueabihf-g++ - (可选)可以在编译选项里添加
-march=armv7-a,针对BeagleBone的架构做优化
- 打开你的Eclipse项目,右键选择
- 重新编译并验证
编译完成后,再用file ./program检查,输出应该包含ARM字样(比如ELF 32-bit LSB executable, ARM, EABI5 version 1),然后把这个文件传到BeagleBone上就能运行了。
解决方案2:在BeagleBone上直接编译(简单,适合小项目)
如果不想折腾交叉编译,直接在目标机器上编译更稳妥:
- 在BeagleBone Black的终端安装编译工具:
sudo apt-get update sudo apt-get install build-essential - 把你的C++源代码文件传到BeagleBone上(用
scp或者SFTP工具都可以) - 在BeagleBone上编译:
g++ your_source.cpp -o program - 赋予执行权限(如果需要):
chmod +x ./program,然后直接运行./program即可。
额外注意事项
- 传输文件时尽量用
scp命令(比如scp ./program user@beaglebone_ip:/path/to/dir),避免用普通文件传输导致文件损坏 - 如果运行时还是提示权限问题,确认文件有执行权限:
ls -l ./program看权限位有没有x
内容的提问来源于stack exchange,提问作者ClaudiaGR
相关产品推荐
相关产品推荐

