Динамически загружать внешние модули в программе на C?

StackOverflow https://stackoverflow.com/questions/211934

  •  03-07-2019
  •  | 
  •  

Вопрос

Я уверен, что эта проблема была решена раньше, и мне любопытно, как это было сделано. У меня есть код, в котором при запуске я хочу сканировать содержимое каталога и загружать его по функциональности.

В частности, я работаю со скриптовым движком, к которому я хочу иметь возможность добавлять вызовы функций. Я хочу, чтобы основной движок предоставлял очень ограниченную функциональность. Пользователь должен иметь возможность добавлять дополнительные функции через сторонние библиотеки, которые я хочу, чтобы механизм сканировал и загружал. Как это сделать?

Это было полезно?

Решение

Это зависит от платформы. На win32 вы вызываете LoadLibrary для загрузки DLL, а затем получаете функции из нее с помощью GetProcAddress . На платформах Unixy эквивалентами являются dlopen и dlsym .

Другие советы

Вы можете использовать функции POSIX dlopen / dlsym / dlerror / dlclose в Linux / UNIX для динамического открытия общих библиотек и доступа к символам (включая функции), которые они предоставляют, см. справочная страница для получения дополнительной информации.

Если вы хотите использовать для этого библиотеку, я бы порекомендовал GLib (служебная библиотека, которая находится под инструментарием GTK + UI). Он содержит GModule & Quot; суб-API, который обеспечивает чистый, портативный способ сделать это. Это избавляет вас от необходимости самостоятельно оборачивать соответствующие вызовы, а также предоставляет вам остальную часть GLib, которую очень удобно иметь в программах на C любого размера.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top