Ubuntu 22.04 WSL交叉编译SDL2至树莓派4 aarch64遇CMake错误
问题原因
你安装的SDL2是针对WSL Ubuntu(x86_64架构)的版本,因此库文件和配置文件都存放在/usr/lib/x86_64-linux-gnu路径下。交叉编译树莓派4(aarch64架构)程序时,CMake需要搜索适配ARM64架构的SDL2库,但默认的搜索路径指向主机(x86_64)的库目录,自然找不到对应的SDL2Config.cmake或sdl2-config.cmake。
解决方案
1. 安装官方aarch64架构SDL2开发包
Ubuntu仓库支持跨架构软件包安装,直接获取针对aarch64的SDL2开发包即可:
- 添加aarch64架构支持:
sudo dpkg --add-architecture arm64 - 更新软件源:
sudo apt update - 安装aarch64版本的SDL2开发包:
sudo apt install libsdl2-dev:arm64
安装完成后,SDL2的库和配置文件会自动放到/usr/lib/aarch64-linux-gnu,CMake交叉编译时可自动识别。
同理,Vulkan也需要安装对应架构的开发包:
sudo apt install libvulkan-dev:arm64
2. 手动编译aarch64版本的SDL2(适用于官方包版本不符的场景)
- 从SDL官方仓库下载源码
- 创建交叉编译目录并进入:
mkdir build-aarch64 && cd build-aarch64 - 用aarch64工具链配置编译参数:
../configure --host=aarch64-linux-gnu --prefix=/usr/local/aarch64-linux-gnu - 编译并安装:
make -j$(nproc) && sudo make install
之后在CMake配置时,指定SDL2的配置路径:
cmake -S . -B build-aarch64 -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -DSDL2_DIR=/usr/local/aarch64-linux-gnu/lib/cmake/SDL2
3. 配置CMake交叉编译工具链文件
创建toolchain-aarch64.cmake文件,强制CMake搜索aarch64架构的库路径:
set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) # 指定aarch64库的根路径 set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu /usr/local/aarch64-linux-gnu) # 限制搜索范围,只找目标架构的文件 set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
使用该工具链文件进行CMake配置:
cmake -S . -B build-aarch64 -DCMAKE_TOOLCHAIN_FILE=toolchain-aarch64.cmake
内容的提问来源于stack exchange,提问作者Ferry
相关产品推荐
相关产品推荐

