gpt4 book ai didi

docker - 为 ARM 交叉编译 Rust 程序时的 ALSA 链接

转载 作者:行者123 更新时间:2023-11-29 08:20:05 24 4
gpt4 key购买 nike

我正在尝试交叉编译一个简单的 Rust 程序,以使用 wavy crate 在 Raspberry Pi Zero 上使用 ALSA 驱动程序录制声音在安装了 libasound-dev 库的 Docker 容器中。但是,链接器提示:

 note: /opt/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lasound
collect2: error: ld returned 1 exit status

Cargo 似乎要求 rustc 使用参数 -Bdynamic""-lasound" 动态链接 asound 库。我如何告诉 Cargo 到哪里寻找这些 ALSA 库?

更新:我将以下内容添加到我的 Cargo.toml 文件中,并将 --features "alsa-backend" 添加到我的 cargo build似乎已经推进构建的命令:

[features]
alsa-backend = ["alsa"]

[dependencies]
alsa = { version = "0.2.1", optional = true }

它现在抛出:

note: /usr/lib/x86_64-linux-gnu/libasound.so: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status

好的,它链接到 libasound.so 的 x86_64 版本。我在我的 Docker 容器中输入了 dpkg -L libasound-dev,实际上,它列出了 /usr/lib/x86_64-linux-gnu/libasound.so 而不是 ARM 版本.

如何让 Raspbian Docker 容器链接到 libasound.so 的 ARM 版本?

最佳答案

解决方案:

  1. 将 armhf 版本的 libasound-dev 安装到您的 Raspbian docker 镜像:
apt-get install libasound-dev -y
apt-get install libasound-dev:armhf -y

(如果你只安装libasound-dev:armhf,它会提示alsa-sys链接器错误。)

  1. 为 Cargo.toml 添加 alsa 依赖:
[dependencies]
alsa = { version = "0.2.1", optional = true }
wavy = { path = "./wavy" }
  1. 在 Cargo.toml 中设置 alsa-backend 标志:
[features]
alsa-backend = ["alsa"]
  1. --features "alsa-backend" 传递给 cargo build --target arm-unknown-linux-gnueabihf(应应用目标)

  2. .cargo/config中告诉rustc使用armhf版本:

[build]

[target.arm-unknown-linux-gnueabihf.libasound]
linker = "arm-linux-gnueabihf-gcc"
rustc-link-lib = ["libasound"]
rustc-link-search = ["/usr/lib/arm-linux-gnueabihf"]

(根据它链接的顺序,它可能会尝试使用 x86 版本而不是 armhf 版本。)

关于docker - 为 ARM 交叉编译 Rust 程序时的 ALSA 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57037550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com