Ubuntu虚拟机交叉编译树莓派C++程序出现内存访问错误求助
交叉编译树莓派C++程序出现内存访问错误的原因及解决办法
嘿,我来帮你排查这个问题——你遇到的德语提示「Speicherzugriffsfehler」(内存访问错误),核心原因是编译命令的语法错误,咱们一步步说清楚:
1. 编译命令的致命错误
你用的编译命令:
arm-linux-gnueabihf-g++ hello.cpp hello
这个写法完全错了!g++(包括交叉编译版本)的语法里,输出文件需要用 -o 参数指定。你现在直接把 hello 放在后面,编译器会把它当成第二个输入源文件来处理——但hello还不存在,就算编译过程没报错,最终生成的文件也不是符合ARM架构的可执行程序,运行时自然会触发内存访问错误。
正确的编译命令
把输出文件用 -o 指定:
arm-linux-gnueabihf-g++ hello.cpp -o hello
2. 其他需要注意的细节
除了命令错误,还有几个小地方可以检查,避免后续踩坑:
- 工具链匹配:你安装的
g++-arm-linux-gnueabihf是针对ARM32位架构(armhf)的,适合树莓派2/3/4(32位系统),如果你的树莓派是64位系统,需要换成g++-aarch64-linux-gnu - 文件权限:把编译好的
hello传到树莓派后,记得给它加可执行权限:chmod +x hello - 代码小笔误:你的Hello World里有个拼写错误——
Hello Worl from Pi少了个字母d,改成Hello World from Pi就完美了(这个不影响运行,只是输出内容不对)
验证步骤
- 用正确命令重新编译
- 通过SCP或者U盘把
hello传到树莓派 - 在树莓派终端运行
./hello,应该就能正常输出了
内容的提问来源于stack exchange,提问作者andreas42
相关产品推荐
相关产品推荐

