Как мне настроить таргетинг моего приложения на Rust и его зависимостей на musl? - PullRequest
1 голос
/ 08 ноября 2019

Я пытаюсь запустить приложение ржавчины на Alpine, но у меня проблемы с использованием musl в качестве цели или использованием слоя совместимости для glibc. Когда я пытаюсь использовать libc6-compat, у меня возникает такая проблема:

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

Это ошибка или эти символы вообще не поддерживаются уровнем совместимости?

КогдаЯ пытаюсь нацелить мусл, у меня другая проблема. Я не могу скомпилировать свое приложение непосредственно на MUSL, потому что некоторые функции из компилятора ржавчины не поддерживаются. Я сделал компиляцию образа Debian, нацеленного на musl, и переместил мой бинарный файл в свой альпийский образ. Похоже, даже нацеленный на musl, компоновщик все еще использует некоторые варианты glibc во время сборки, что мой небольшой опыт работы с C не помогает мне быть уверенным, будет ли это проблемой или нет. Мое приложение зависит от glib2, который я установил через apkи когда он запускается, происходит сбой со следующим:

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

Я пытаюсь скомпилировать пример C прямо в моем контейнере Alpine, и он работает там, так что я поверил, что у меня возникли некоторые проблемыс кросс-компиляцией / линковкой в ​​моем контейнере glibc. Любые идеи о том, как я могу решить это?

Примечание: я мог бы просто использовать контейнер glibc, но ни у одного из тех, кого я знаю, нет минимального менеджера пакетов. Варианты debian устанавливают слишком много вредоносного ПО, которое не требуется из моих зависимостей (я не понимаю, почему они вставляют необязательные зависимости, как это требуется в менеджере пакетов), делая изображение больше 1 ГБ, тогда как моя альпийская версия составляет 100 МБ. Та же картина с вариантами RPM. Я бы хорошо с большим изображением, чем 100 МБ, но не 1 ГБ.

1 Ответ

0 голосов
/ 09 ноября 2019

Выяснилось, что можно скомпилировать на alpine, если вы укажете компилятору специальный флаг для использования динамического связывания, как здесь: https://github.com/rust-lang/rust/pull/58575#issuecomment-496026747

И флаг: RUSTFLAGS='-C target-feature=-crt-static'

...