¿Cargar dinámicamente módulos externos en un programa en C?
-
03-07-2019 - |
Pregunta
Estoy seguro de que este problema se ha resuelto antes y tengo curiosidad por saber cómo se hace. Tengo un código en el que, cuando se ejecuta, deseo escanear el contenido de un directorio y cargar la funcionalidad.
Específicamente, estoy trabajando con un motor de secuencias de comandos al que quiero poder agregar llamadas de función. Quiero que el motor central proporcione una funcionalidad muy limitada. El usuario debería poder agregar funciones adicionales a través de bibliotecas de terceros, que quiero que el motor busque y cargue. ¿Cómo se hace esto?
Solución
Depende de la plataforma. En win32, usted llama a LoadLibrary
para cargar una DLL, luego obtiene las funciones con GetProcAddress
. En las plataformas Unixy, los equivalentes son dlopen
y dlsym
.
Otros consejos
Puede usar las funciones POSIX dlopen / dlsym / dlerror / dlclose en Linux / UNIX para abrir bibliotecas compartidas dinámicamente y acceder a los símbolos (incluidas las funciones) que ofrecen, consulte página de manual para más detalles.
Si desea utilizar una biblioteca para esto, le recomendaría GLib (la biblioteca de utilidades que se encuentra debajo del kit de herramientas GTK + UI). Presenta el " GModule " sub-API, que proporciona una forma limpia y portátil de hacerlo. Esto le ahorra tener que envolver las llamadas relevantes usted mismo y también le brinda el resto de GLib, que es muy útil para tener en programas en C de cualquier tamaño.