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

问题描述 投票:1回答:1

我正在尝试在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上编译应用程序,因为不支持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的更大图像。

rust linker linker-errors alpine musl
1个回答
0
投票

发现可以在alpine上进行编译,只要您向编译器指定特殊标志以使用动态链接即可,如下所示:https://github.com/rust-lang/rust/pull/58575#issuecomment-496026747

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

© www.soinside.com 2019 - 2024. All rights reserved.