树莓派与交叉编译

Posted by Hsz on February 22, 2018

树莓派和交叉编译

树莓派的性能弱鸡,造成的一个很大的问题就是编译一些软件非常的慢,这时候交叉编译技术就有了用武之地.

交叉编译工具

交叉编译工具是针对执行二进制文件的平台而选择,对于树莓派有专门的交叉编译工具https://github.com/raspberrypi/tools

通常我们用gcc作为交叉编译的编译器,linux下可以使用sudo apt-get install build-essential安装整个编译环境 mac下则可以使用homebrew

brew install gcc

在windows下我们就只能使用MinGW了,mingw可以使用anaconda安装

conda install mingw

类似的cmake等工具也可以同一途径安装

依赖装好后就将交叉编译工具下载到本地

git clone https://github.com/raspberrypi/tools.git

或者使用wget下载zip格式的项目

wget https://codeload.github.com/raspberrypi/tools/zip/master
unzip master -d tools

这样tools/tools-master下就是项目目录.项目目录arm-bcm2708下有可用的交叉编译工具

arm-bcm2708hardfp-linux-gnueabi  arm-linux-gnueabihf            gcc-linaro-arm-linux-gnueabihf-raspbian
arm-bcm2708-linux-gnueabi        arm-rpi-4.9.3-linux-gnueabihf  gcc-linaro-arm-linux-gnueabihf-raspbian-x64

对于32位的系统,使用gcc-linaro-arm-linux-gnueabihf-raspbian,

对于64位的使用gcc-linaro-arm-linux-gnueabihf-raspbian-x64或者arm-rpi-4.9.3-linux-gnueabihf.

在此选择64位上的交叉编译工具gcc-linaro-arm-linux-gnueabihf-raspbian-x64.

添加环境变量

要使用交叉编译工具需要添加环境变量.

export RPI_CROSS_COMPILE=/<your path to>/Raspberry/tools/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64
export PATH=$RPI_CROSS_COMPILE/bin:$PATH

之后使用source ~/.zshrc使环境变量立即生效 这样就可以直接使用交叉编译工具了

arm-linux-gnueabihf-gcc -v

查看gcc版本以测试是否配置成功

简单的例子

我们新建一个项目test_ccp用于测试交叉编译是否有效:

test_ccp目录下创建文件

  • hello.c

      #include <stdio.h>  
      int main(void)  
      {  
          float pi = 3.14;      
          printf("Hello World\n");  
          printf("%.2f\n",2*pi);  
      } 
    
  • Makefile

      CC=arm-linux-gnueabihf-gcc
      hello:hello.o
      clean:
          rm -rf hello.o hello
    

    CC用于指定编译的工具链

之后执行make,就会创建出一个hello文件来,这个文件在当前息系统下是无法执行的,我们将其复制到树莓派上scp hello pi@xxxx:~/hello.

之后登录树莓派执行hello这个文件就可以看到它正确的执行了.