与大多数PC机不同,树莓派采用arm架构的cpu芯片。由于intel芯片采用CISC指令集,而arm采用RISC指令集,这意味着在树莓派上运行的可执行程序,其遵循的指令集与PC机上的可执行程序遵循的指令集不同。所以PC机上普通的C/C++编译器产生的可执行程序是不能在树莓派上运行的。
如何编译出树莓派“能识别”的程序呢?办法有2个:1是在树莓派上直接安装编译器,然后在其上直接编译;2是在PC机上安装一个专门针对树莓派的编译器。这个编译器产生的文件是不能在PC机上运行的,但是可以在树莓派上运行。第二种办法称为交叉编译。
本文介绍第二种办法。
步骤:
1 准备一台安装了ubuntu的PC机,并在其上安装git
2 在~文件夹下建立文件夹raspberryPi。在Linux操作系统下,~意味着 /HOME/用户名/ 路径。
3 进入该文件夹,输入
git clone git://github.com/raspberryPi/tools.git
4 下载完毕后,raspberryPi文件夹下将出现tools文件夹。
输入命令
sudo nano ~/.bashrc
5 在.bashrc中,添加如下代码:
PATH=$PATH:~/raspberryPi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
6 按下ctrl+o保存修改,然后按下ctrl+x推出nano编辑器
7 在命令行输入
arm-linux-gnueabihf-gcc --version
以确定交叉编译器可用
8 建立一个简单的cpp文件:helloworld.cpp
#include <stdio.h>
int main(void)
{
printf("hello world!\n");
return 0;
}
9 进入helloworld.cpp所在文件夹下,输入
arm-linux-gnueabihf-g++ helloworld.cpp -o helloworld
10 将raspberryPi的SD卡取出,通过SD-USB转换器插入PC机,将第9步中编译产生的文件helloworld复制到SD卡的~文件夹下
11 将SD-USB转换器从PC机取出,将SD卡插入raspberryPI中,并将SD卡专用屏也安装上。(参见我以前的博客 给raspberry Pi B 安装3.5英寸触摸屏)。启动树莓派。
12 点击树莓派界面左上方的命令行图标,进入~路径。利用mkdir命令在~路径下建立文件夹exec.利用mv命令将helloworld移动到exec中。
13 执行命令 ./helloworld,观察输出。