发布于 

安装 NCNN 以及 ARM 交叉编译器

平台:WSL2 Ubuntu 24.04

编译安装

根据 NCNN how-to-build, 首先安装交叉编译器 Arm GNU Toolchain,选择 arm-gnu-toolchain-13.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz

解压并设置环境变量后,执行以下编译命令:

1
2
3
4
5
cd <ncnn-root-dir>
mkdir -p build-aarch64-linux-gnu
cd build-aarch64-linux-gnu
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake ..
make -j$(nproc)

若出现如下报错:

1
2
3
4
5
...
The CMAKE_CXX_COMPILER:
aarch64-linux-gnu-g++
is not a full path and was not found in the PATH.
...

注意到 cmake 文件中 C/C++ 编译器需要设置为上文安装的交叉编译器的名称, 故修改 <ncnn-root-dir>/toolchains/aarch64-linux-gnu.toolchain.cmakeCMAKE_C_COMPILERCMAKE_CXX_COMPILERaarch64-none-linux-gnu-gccaarch64-none-linux-gnu-g++。 修改后重新执行编译指令。

代码阅读

在 vscode 阅读/开发 cmake 项目时,为了获得正确的 IntelliSense 等功能,需要设置 .vscode/c_cpp_properties.json, 重点修改 compilerPathintelliSenseModecompileCommands,示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"configurations": [
{
"name": "aarch64",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/home/chlience/arm-gnu-toolchain-13.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++",
"cStandard": "c17",
"cppStandard": "gnu++17",
"intelliSenseMode": "linux-gcc-arm64",
"compileCommands": "/home/chlience/ncnn/build-aarch64-linux-gnu/compile_commands.json"
}
],
"version": 4
}

compilerPath 为安装的 C++ 交叉编译器路径。

在修改 compilerPath 时,intelliSenseMode 将会被隐式修改为编译器对应的 linux-gcc-arm64(可以在 vscode 输出中看到), 为了展示此处一并显式手动修改。

compileCommands 为 cmake 生成的项目编译相关文件,可以传递包括 includePath 在内的丰富编译信息。 运行 cmake 时添加参数 -DCMAKE_EXPORT_COMPILE_COMMANDS=1 或者在 cmake 文件中添加 set(CMAKE_EXPORT_COMPILE_COMMANDS True, 进行编译即可在输出目录获得 compile_commands.json 文件。