我如何定位我的 Rust 应用程序及其对 musl 的依赖?

How can I target my Rust application and it's dependencies to musl?

我正在尝试 运行 我在 Alpine 上的 Rust 应用程序,但我在使用 musl 作为目标或使用 glibc 的兼容层时遇到问题。 当我尝试从 libc6-compat 使用时,我遇到了这个问题:

Error relocating my_app: __register_atfork: symbol not found
Error relocating my_app: __res_init: symbol not found

这是错误还是兼容层根本不支持此符号?

当我尝试以 musl 为目标时,我遇到了一个不同的问题。我无法直接在 musl 上编译我的应用程序,因为不支持 rust 编译器的某些功能。我所做的是在一个以 musl 为目标的 debian 映像上进行编译,并将我的二进制文件移动到我的 alpine 映像中。看起来即使是针对 musl,链接器在构建时仍然使用一些 glibc 变体,我对 C 的一点经验并不能帮助我确定这是否会成为问题或 not.My 应用程序取决于我安装的 glib2通过 apk 启动时失败并显示以下内容:

**
GLib-GObject:ERROR:../gobject/gtype.c:2743:g_type_register_static: assertion failed: (static_quark_type_flags)
Aborted

我试图直接在我的 alpine 容器中编译一个 C 示例并且它在那里工作,所以这让我相信我的 glibc 容器中的交叉 compilation/linking 遇到了一些问题。关于如何解决这个问题的任何想法?

注意:我可以只使用 glibc 容器,但我所知道的容器都没有最小的包管理器。 debian 变体安装了太多我的依赖项不需要的英国媒体报道软件(我不明白为什么他们会根据需要在包管理器中插入可选的依赖项)使图像大于 1GB,而我的 alpine 版本是 100MB。与 RPM 变体相同的模式。我可以接受大于 100MB 的图片,但不能接受 1GB。

发现可以在 alpine 上编译,前提是您为编译器指定一个特殊标志以使用此处找到的动态链接: https://github.com/rust-lang/rust/pull/58575#issuecomment-496026747

和标志:RUSTFLAGS='-C target-feature=-crt-static'