Я пытаюсь создать сервис / демон, который облегчает запуск «апплетов» в своей оболочке процесса. Служба предоставляет функциональность через библиотеку, которую вызывают эти апплеты. Наиболее важно то, что здесь необходимо, чтобы все эти апплеты выполнялись в той же границе процесса, что и сама служба. Апплет также должен регистрироваться в службе при загрузке.
Я хотел бы спроектировать службу так, чтобы ее можно было создавать независимо от этих апплетов, а также чтобы в ней не было кода, специально предназначенного для этого. знать об этих апплетах.
Один из вариантов здесь - собрать апплеты в виде разделяемых библиотек (.so), чтобы все они были помещены в целевую файловую систему в определенной папке, которая ищется службой при загрузке, загрузке все .so в этой папке динамически через dl_open
. Помечая функцию init __attribute__((constructor))
в самом апплете, апплет получает возможность регистрироваться в службе во время инициализации.
Существует ли статическая версия / версия во время соединения? Я баловался с предложением здесь , но не могу помешать компилятору оптимизировать объект реестра глобальной функции, который экспортируется каждым апплетом. Использование -Wl,--whole-archive
также не работает, поскольку он жалуется на множественное определение функций, предоставляемых библиотекой service / daemon при связывании двух или более таких библиотек апплетов.