Travis CI构建Rust二进制时解决alsa-sys找不到alsa.pc的问题
解决Travis CI Linux构建中alsa-sys找不到alsa.pc的问题
这个问题的根源很清晰:Travis CI的Linux虚拟机默认没有安装ALSA的开发依赖库,而alsa-sys crate需要通过pkg-config来定位alsa.pc文件,找不到这个文件自然就会构建失败。
你只需要在.travis.yml中添加一个针对Linux系统的依赖安装步骤就能解决,具体操作如下:
- 在配置中新增
before_install字段,针对Linux系统安装libasound2-dev(这是Ubuntu/Debian环境下ALSA开发库的包名,Travis的Linux构建环境基于Ubuntu):
修改后的完整.travis.yml配置如下(我标记了新增的核心部分):
language: rust cache: cargo rust: - stable matrix: allow_failures: - rust: nightly fast_finish: true os: - osx - windows - linux # 新增的before_install步骤,仅在Linux环境执行依赖安装 before_install: - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get update && sudo apt-get install -y libasound2-dev; fi script: - cargo build --verbose --release before_deploy: - if [[ -f target/release/soundsense-rs ]]; then mv target/release/soundsense-rs "target/release/soundsense-rs-$TRAVIS_TAG-$TRAVIS_OS_NAME"; fi - if [[ -f target/release/soundsense-rs.exe ]]; then mv target/release/soundsense-rs.exe "target/release/soundsense-rs-$TRAVIS_TAG-$TRAVIS_OS_NAME.exe"; fi deploy: - provider: releases skip_cleanup: true on: tags: true condition: "$TRAVIS_RUST_VERSION = stable" branch: release file_glob: true file: - target/release/soundsense-rs-* api_key: secure: IRdsT0enLWr2qaa63GPnITLaYdar4vDKcKfo9Fm1PlDoWi1gigTZ2elegApdBQmWzcgdHEtiEayg9KtQw76R/l7bH2Yst3kvZPyd635g6Cwj9XUp70opApLeKdVGQhnvGA2fMehYXNfcLi8wn65th3katabvJhuU26C1ICAFt1ExVu2iDbIjUYPmg5O4f3BAvHYlGe5BNyA3C20sakD25ocp+Z/KaI1gfRdYvm3cwVuci63N2O0c+j2IHkaUg/bfA7XHRUqzxO1U4MNrRyYAwRRiIJ+wgKVh9qISt4N0Uw8IZR8ZmBkeK4OPkh+ggb05ONoOpCuOVDGKqMzbEG0SNKbDpwXdxfCkmbtNeXrORX6ZSlNPJOGaPhrD36WYZdRGOZMNC4lSgev/O2lZ/TfJc1Qj9kXlD7kbmG/vKrSkQYs4i/5p4a93E0zgBfyWiK1wiUYCc01PF5YKjbc0n7aymSO3z3CzGijwykH6MKFnInk1JtJ2aUjBM722oKVuCaW/JDikN4wMgPrlIMUY+dLrXBJZLXra89B/RS6un1NsTO0IPyMDQYKRgp6yTkvWJHux0m0Gwexnc+S/dPhb9Z023UDA0pb504XNc7ggpo9xtb5sUa/z/xQRoX3fKFSUEOoNLI3Kw/DE4QwHmnvVSdOGF4+s3Kj2JqnKSZusq3yycnw=
为什么这个方法有效?
libasound2-dev包包含了ALSA的头文件和alsa.pc配置文件,安装后pkg-config就能在系统默认的搜索路径中找到alsa.pc,alsa-sys的构建脚本也就可以正常获取编译和链接所需的参数了。
内容的提问来源于stack exchange,提问作者prixt




