Я пытаюсь запустить приложение ржавчины на 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 ГБ.