树莓派交叉编译使用文档
假设用户为ac,HOME目录为/home/ac
-
下载交叉编译工具链
- 在HOME目录下创建projects文件夹并进入
git clone git://github.com/raspberrypi/tools.git
-
选择编译器
- 克隆完成在projects下会有一个tools文件夹
- 进入tools/arm-bcm2708文件夹下,有五个不同的编译器
- arm-bcm2708hardfp-linux-gnueabi
- arm-bcm2708-linux-gnueabi
arm-linux-gnueabihf -> arm-rpi-4.9.3-linux-gnueabihf- arm-rpi-4.9.3-linux-gnueabihf
- gcc-linaro-arm-linux-gnueabihf-raspbian
- gcc-linaro-arm-linux-gnueabihf-raspbian-x64
- 选择arm-rpi-4.9.3-linux-gnueabihf编译器,进入bin目录,使用arm-linux-gnueabihf-g++编译程序
-
创建软链接到编译工具,并加入环境变量(可跳过,直接使用编译器的绝对路径)
- 在HOME目录下创建bin文件夹并进入
ln -s /home/ac/projects/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ arm-g++
- 运行
echo $PATH
,若/home/ac/bin在环境变量里,跳到第4步,否则继续 - 回到HOME目录并运行
vim .bashrc
(或者其他文本编辑器)在末尾加入 export PATH="/home/ac/bin:$PATH"
- 保存文件并运行
source .bashrc
-
测试环境
- 此时环境已配置完成,编写简单的a.cpp文件,直接执行
arm-g++ a.cpp
即可生成可执行程序a.out,拷贝到树莓派输入./a.out
即可执行 - 若文件未生成,即为环境配置有问题,若拷贝到树莓派不能执行,可能树莓派的架构和编译器不匹配,tools里有其他架构编译器
- 此时环境已配置完成,编写简单的a.cpp文件,直接执行
-
编写Makefile文件
- 指定Makefile文件的CC变量,
CC = arm-g++
- 若未加入环境变量,
CC = /home/ac/projects/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
- 其他选项和普通Makefile编写一样,注意链接库也要是arm版本的,以下代码可供参考,注意,务必将四个空格替换为Tab
CC = arm-g++ #CFLAGS = -Wall -g -O -fPIC -D_DEBUG CFLAGS = -Wall -g -O -fPIC -std=c++11 INCLUDE = -I../SickToolBox/include/laser_node -I./ -I./capture -I../build/include -I../build/include/activemq-cpp-3.9.4 -I../build/include/apr-1 LIBRARYS = -L../SickToolBox/src -lSick -pthread -L../build/lib -lapr-1 -lactivemq-cpp OBJS = capture.o utils.o UDPClient.o ActiveMQWrapper.o all:$(OBJS) $(CC) $(CFLAGS) capture/main.cpp $(OBJS) $(LIBRARYS) -o main.out $(OBJS):$(SRCS) $(CC) $(CFLAGS) $(INCLUDE) -c capture/capture.cpp -o capture.o $(CC) $(CFLAGS) $(INCLUDE) -c capture/utils.cpp -o utils.o $(CC) $(CFLAGS) $(INCLUDE) -c capture/UDPClient.cpp -o UDPClient.o $(CC) $(CFLAGS) $(INCLUDE) -c capture/ActiveMQWrapper.cpp -o ActiveMQWrapper.o .PHONY:clean clean: -rm *.o -rm *.out
- 指定Makefile文件的CC变量,
-
make
- 执行
make all
- 拷贝可执行程序和库到树莓派
- 执行