本文档解释了交叉编译过程,即在一个平台上构建 scrcpy 以在另一个平台上运行。交叉编译主要用于在 Linux 系统上构建 Windows 二进制文件,但该过程也涵盖了为 macOS 上的不同架构进行构建。
交叉编译使 scrcpy 能够保持一致的构建过程,同时为多个目标平台生成二进制文件。这对于创建官方发布和确保跨平台的构建可重复性尤其重要。
来源: cross_win64.txt cross_win32.txt release/build_windows.sh release/build_linux.sh release/build_macos.sh
Scrcpy 使用 Meson 的交叉文件格式来定义交叉编译环境。主要使用两个配置文件
这些文件指定了 Windows 构建的编译器工具链和目标系统
| 配置文件 | 目标 | 描述 |
|---|---|---|
cross_win32.txt | 32 位 Windows | 指定 i686 架构和 MinGW 工具链 |
cross_win64.txt | 64 位 Windows | 指定 x86_64 架构和 MinGW 工具链 |
这两个文件都遵循 Meson 的交叉文件格式,包含 binaries(定义编译器和工具)和 host_machine(指定目标系统属性)部分。
来源: cross_win64.txt cross_win32.txt
交叉编译构建过程由 shell 脚本协调,这些脚本执行以下操作:
Windows 构建过程由 release/build_windows.sh 触发,并支持 32 位和 64 位目标。
来源: release/build_windows.sh .github/workflows/release.yml126-186
该脚本处理以下事项:
Windows 构建脚本的关键部分
meson setup "$WINXX_BUILD_DIR" \
--pkg-config-path="$DEPS_INSTALL_DIR/lib/pkgconfig" \
-Dc_args="-I$DEPS_INSTALL_DIR/include" \
-Dc_link_args="-L$DEPS_INSTALL_DIR/lib" \
--cross-file=cross_$WINXX.txt \
--buildtype=release \
--strip \
-Db_lto=true \
-Dcompile_server=false \
-Dportable=true
来源: release/build_windows.sh33-42
Scrcpy 为多个目标平台实现了构建脚本
| 脚本 | 目标平台 | 交叉编译 |
|---|---|---|
build_windows.sh | Windows (32/64 位) | 是的,在 Linux 上使用 MinGW |
build_linux.sh | Linux (x86_64) | 否,原生构建 |
build_macos.sh | macOS (x86_64, aarch64) | 否,但支持不同架构 |
尽管严格来说不是交叉编译,但 macOS 构建同时支持 Intel (x86_64) 和 Apple Silicon (aarch64) 架构
来源: release/build_macos.sh .github/workflows/release.yml188-273
依赖项对交叉编译过程至关重要。每个依赖项都由 app/deps/ 目录下的特定脚本处理
| 依赖脚本 | 目的 |
|---|---|
adb_windows.sh, adb_linux.sh, adb_macos.sh | 下载特定平台的 ADB 二进制文件 |
sdl.sh | 为目标平台构建 SDL2 库 |
dav1d.sh | 为目标平台构建 dav1d AV1 解码器 |
ffmpeg.sh | 为目标平台构建 FFmpeg 库 |
libusb.sh | 为目标平台构建 libusb |
每个依赖脚本都支持原生构建和交叉编译场景。
来源: app/deps/dav1d.sh25-68 app/deps/adb_windows.sh app/deps/adb_linux.sh app/deps/adb_macos.sh
交叉编译过程已集成到 CI/CD 管道中,使用了 GitHub Actions。 .github/workflows/release.yml 中的工作流协调了以下操作:
来源: .github/workflows/release.yml release/generate_checksums.sh
交叉编译的常见问题包括:
缺少依赖项:确保所有必需的软件包都已安装在主机系统上。
sudo apt install mingw-w64 mingw-w64-tools libz-mingw-w64-dev
路径问题:交叉编译时,确保为交叉编译环境正确指定了路径。
--pkg-config-path 指向交叉编译的依赖项。-Dc_args 和 -Dc_link_args 显式指定包含和库路径。版本兼容性:确保交叉编译的依赖项与目标平台兼容。不同的 Windows 版本可能需要特别考虑。
ABI 兼容性:注意应用程序二进制接口 (ABI) 的兼容性,尤其是在交叉编译 Windows 时。
来源: cross_win64.txt1-2 cross_win32.txt1-2 release/build_windows.sh33-42
刷新此 Wiki
最后索引时间2025年4月17日(5900e9)