2011-01-10 10 views
11

Sé que en Windows que haría algo como LoadLibrary y luego configurar el puntero de función con GetProcAddress,Cargando una biblioteca dinámicamente en Linux o OSX?

Pero, ¿cómo sería algo similar puede hacer de Linux o OSX? La razón es que quiero desarrollar un sistema plug-in para mi aplicación de la plataforma X.

Gracias

Respuesta

10

Puede usar dlopen y amigos en Linux y Mac OS X (this Mac man page debería funcionar para ambos). Sin embargo, tenga en cuenta que debe tener cuidado de no mezclar códigos y bibliotecas de 32 y 64 bits; en la Mac, solo asegúrate de que las bibliotecas sean "binarias universales".

+0

¿Comenta que los "binarios universales" se aplican tanto a Linux como a Mac? Puede valer la pena aclarar. –

+0

Hasta donde yo sé, no existe un esquema binario de grasa generalmente disponible para Linux, pero ("binario universal" es el lenguaje de Apple para un binario gordo). Ver http://en.wikipedia.org/wiki/Fat_binary#FatELF:_Universal_Binaries_for_Linux – EmeryBerger

+0

@David - esta carta desdeñosa de Ulrich Drepper (¡sorpresa!) Hace que sea muy poco probable que Linux admita binarios gordos hasta que el Infierno se congele en ... http : //www.redhat.com/archives/fedora-devel-list/2009-October/msg01118.html – EmeryBerger

5

En Linux utiliza dlopen() (Open Library), dlsym() (buscar un símbolo (= función o valor, por lo general)) y amigos: http://linux.die.net/man/3/dlopen

escucho funciona de la misma manera en OS X, pero no tengo experiencia con eso.

19

Usted está buscando dlopen (análogo a LoadLibrary), dlclose (análogo a FreeLibrary) y dlsym (análogo a GetProcAddress).

2

Los equivalentes de POSIX son dlopen y dlsym. Sé que Linux los tiene, y me sorprendería si OS X no.

Cuestiones relacionadas