gpt4 book ai didi

rust - 构建和绑定(bind)旧的 libc 版本

转载 作者:行者123 更新时间:2023-12-03 11:34:02 25 4
gpt4 key购买 nike

我的代码中有需要 libc 的依赖项。在 Ubuntu 20.04 (glibc 2.31) 上构建 (cargo build --release) 时,生成的可执行文件无法在 CentOS 7 (glibc 2.17) 上运行。它抛出一个错误,说它需要 GLIBC 2.18。
在 CentOS 7 上构建相同的代码时,生成的可执行文件在 CentOS 7 和 Ubuntu 20.04 上运行。
有没有办法控制在 Ubuntu 20.04 上构建这个版本需要哪个 GLIBC 版本?

最佳答案

如果您的项目不依赖于任何本地库,那么可能最简单的方法是使用 x86_64-unknown-linux-musl目标。
此目标静态链接到 MUSL Libc而不是动态链接到系统的 libc。因此,它会生成完全静态的二进制文件,可以在广泛的系统上运行。
要安装此目标:

rustup target add x86_64-unknown-linux-musl
要使用此目标构建您的项目:
cargo build --target x86_64-unknown-linux-musl
the edition guide更多细节。
如果您使用任何非 rust 库,则变得更加困难,因为它们可能是动态链接的,并且可能又依赖于系统 libc。在这种情况下,您需要静态链接外部库(假设这甚至是可能的,并且您使用的库将与 MUSL libc 一起使用),或者为您想要定位的每个平台进行不同的构建。
如果您最终不得不为每个平台进行不同的构建,那么 docker 容器将是实现这一目标的最简单方法。

关于rust - 构建和绑定(bind)旧的 libc 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63724484/

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