在Windows下交叉编译和调试树莓派软件
本文提供了利用VSCODE+CMAKE在Windows下交叉编译树莓派程序的方法,分别使用本地环境和WSL两种环境两种方式。以及远程调试的方法。
一、Windows下编译树莓派程序
和在Windows下用Mingw编译Windows程序没什么区别,只是生成的东西是树莓派的软件。Host是Windows, Target是ARM Linux。
- 安装编译器。
到这里下载编译器:raspberry编译器下载。 - 安装CMAKE
- VSCODE 安装CMAKE Tools
- 按F1, 输入CMAKE: Quick Start生成CMakeLists.txt
- 跨平台编译,要在
CMakeLists.txt
的最上面加两行指定目标系统和架构,如下(最后一行设置rpath,Windows习惯了喜欢动态库和可执行放在一个文件夹)1
2
3set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_BUILD_RPATH "./")
二、用WSL来编译树莓派程序
我还有个Respberry Zero,要重新找编译器(疑问,搞不懂官方的系统镜像怎么做到同时适配Zero和4B的?)。
在网上又找到了一个编译器:另一个respberry编译器下载。版本比较新,GCC 10.3.0支持到C++20,我喜欢。
题外话,如果要编译编译器那是一个大工程,可以用这个项目:crosstool-NG。人生苦短,能用就行。
这个编译器是Linux的,编译个树莓派程序还要装个Linux?抓耳挠腮一番突然反应过来,Windows10不就是“最好的Linux发行版”之一吗? ( •̀ .̫ •́ )✧
话不多说,立马打开WSL(我用Ubuntu,装WSL是另一个话题,网上很多,按下不表)。
- 把编译器拷进WSL,解压
tar -zxvf cross-pi-gcc-10.3.0-0.tar.gz
- 手动放到
/opt
目录,这步只是为了看上去像那么回事一点 - 把要编译的源码也拷进来
- 安装CMake
- 运行VSCODE,连接WSL (需要Remote - WSL扩展)
- 在VSCODE里打开源码,提示说要为WSL安装扩展,那就装,直接
C/C++ Extension Pack
装上齐活。 - 不出意外,CMake扫描不到我们下载的跨平台编译器。 按F1, 输入命令
>cmake: edit user-local cmake kits
,我们自己加一个。 注意路径文件写你自己的1
2
3
4
5
6
7{
"name": "GCC 10.3.0 armv6l-linux-gnu",
"compilers": {
"C": "/opt/cross-pi-gcc-10.3.0-0/bin/arm-linux-gnueabihf-gcc",
"CXX": "/opt/cross-pi-gcc-10.3.0-0/bin/arm-linux-gnueabihf-g++"
}
} - 重新启动VSCODE,选择自己加进来的这个编译器。
- CMAKE自动开始配置,我的配置完了提示说啥
Error: spawn arm-linux-gnueabihf-gcc ENOENT
错误之类的云云,无视之。 - 可以编译了,复制到ZERO里运行看看吧
三、通过gdbserver远程调试
在VSCODE的Run and Debug
中,可以生成launch.json
文件,里面这样写:
1 | { |
- 在树莓派中,安装
gdbserver
- 程序编译成DEBUG版,并复制到树莓派中,以我的demo程序为例
- 执行
gdbserver 0.0.0.0:2000 ./demo
,启动软件开始调试demo程序。 - 在VSCODE中,按F5连接到树莓派调试。
题外话:我启动时遇到了gdb缺少依赖的情况,可以用
ldd arm-linux-gnueabihf-gdb
命令查看缺少什么。对照着装就可以。
我装了sudo apt install libpython2.7 libncurses5
后搞定。