我正在尝试在Alpine上运行我的rust应用程序,但是在使用musl作为目标或使用glibc的兼容层时遇到了问题。
当我尝试从libc6-compat
使用时,出现了此问题:
Error relocating my_app: __register_atfork: symbol not found
Error relocating my_app: __res_init: symbol not found
这是bug还是兼容性层完全不支持该符号?
当我尝试瞄准肌肉时,我遇到了另一个问题。我不能直接在musl上编译应用程序,因为不支持rust编译器的某些功能。我所做的是在针对musl的debian图像上进行编译,然后将二进制文件移动到我的高山图像上。看起来甚至是针对musl,链接器在构建时仍会使用一些glibc变体,我对C的一点经验并不能帮助我确定这是否是一个问题。我的应用程序取决于我通过apk安装的glib2并且启动时失败,并显示以下内容:
**
GLib-GObject:ERROR:../gobject/gtype.c:2743:g_type_register_static: assertion failed: (static_quark_type_flags)
Aborted
我试图直接在我的高山容器中编译一个C示例,并且可以在其中运行,所以让我相信我的glibc容器中的交叉编译/链接存在一些问题。关于如何解决这个问题的任何想法?
注意:我只能使用glibc容器,但是我所知的容器都没有最小的软件包管理器。 Debian变体安装了太多依赖我的依赖项不需要的膨胀软件(我不明白为什么它们会在软件包管理器中根据需要插入可选的依赖项),使映像大于1GB,而我的高山版本为100MB。与RPM变体相同的模式。我可以使用大于100MB而不是1GB的更大图像。
答案 0 :(得分:0)
发现可以在alpine上进行编译,前提是您向编译器指定了特殊标志以使用动态链接,如下所示: https://github.com/rust-lang/rust/pull/58575#issuecomment-496026747
还有标志:RUSTFLAGS='-C target-feature=-crt-static'