Я занимался рекламой небольшой структуры IRC в C, которую я сейчас собираюсь расширить с помощью некоторых основных функциональных возможностей, но помимо этого я бы хотел, чтобы она расширялась с помощью плагинов !Архитектура плагина в C с использованием libdl
До сих пор, всякий раз, когда я писал что-то, связанное с IRC (и я написал много, примерно на 6 разных языках сейчас ... Я в огне!) И на самом деле пошел дальше, чтобы внедрить архитектуру плагина, она была внутри интерпретируемый язык, в котором есть возможности для выполнения (чтение: злоупотребление), поэтому, как забивание всего файла сценария через eval
в Ruby (плохо!).
Теперь я хочу оскорбить что-то в C!
В основном есть три вещи, которые я мог бы сделать
- определить простой язык сценариев внутри моей программы
- использовать существующий, вложение переводчика
- использовать libdl для загрузки * .so модули во время выполнения
Я увлекаюсь третьим, и, если возможно, избегайте других двух вариантов. Может быть, я какой-то мазохист, но я думаю, что это может быть весело и полезно для учебных целей.
Логическое мышление, очевидная «цепочка боли» будет (от низкого до высшего) 2 -> 1 -> 3, по той простой причине, что libdl имеет дело с необработанным кодом, который может (и будет) взорваться на моем лице чаще да, чем нет.
Так что этот вопрос выходит вам, другие пользователи stackoverflow, вы думаете, что libdl соответствует этой задаче или даже реалистичной мысли?
Изменения в основной функции - это не-go - я бы просто реализовал такие функции, как «on_channel_message (...)» - по другой мысли .. могут ли библиотеки загружаться с функциями доступа libdl, определенными в основной программе? – LukeN
Иногда они могут, но безопаснее не предполагать (потому что (а) иногда вам нужно передать специальные флаги компиляции, чтобы включить его, и (б) вы вообще не хотите, чтобы они возились с произвольными функциями в основной программе!). Обычно лучше всего перейти в структуру, содержащую список указателей на функции, которые может вызвать плагин. – psmears