2

我正在尝试在 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 的一点经验并不能帮助我确定这是否会成为问题。我的应用程序依赖于我通过 apk 安装的 glib2当它启动时,它会失败并显示以下内容:

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

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

注意:我可以只使用 glibc 容器,但我认识的容器都没有最小的包管理器。debian 变体安装了太多我的依赖项不需要的过时软件(我不明白为什么它们会根据包管理器的要求插入可选的依赖项),使图像大于 1GB,而我的 alpine 版本是 100MB。RPM 变体的模式相同。我可以使用大于 100MB 的图像,但不是 1GB。

4

1 回答 1

1

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

还有旗帜:RUSTFLAGS='-C target-feature=-crt-static'

于 2019-11-08T22:49:50.647 回答