Динамически загружать внешние модули в программе на C? - PullRequest
3 голосов
/ 17 октября 2008

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

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

Ответы [ 3 ]

6 голосов
/ 17 октября 2008

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

4 голосов
/ 17 октября 2008

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

3 голосов
/ 17 октября 2008

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

...