2008-10-17 4 views
3

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

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

ответ

6

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

4

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

+0

В существующих программах можно найти множество примеров. Бесстыдный плагин: моя программа echoping http://echoping.sourceforge.net/ является относительно простым примером такого использования dlopen(). – bortzmeyer 2008-10-17 15:20:24

3

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