我正在尝试在 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。