🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #11933

Re: Cargar librer�as din�micas sin estar presentes en tiempo de compilaci�n.

#11933
From: gradha
Date: Sun, 16 Sep 2001 12:43
46 lines
3413 bytes
Xavier Montero <xmontero@dsitelecom.com> wrote:
> Supongamos que quiero hacer un programa para Linux tal que
> a poisteriori de ser publicado la gente pueda desarrollar
> plugins para tal programa.
> ...
> Mi pregunta es: Qu� debo poner en ***************** para
> cargar la librer�a que se pase en a[1] y c�mo debo compilar
> para que el linker no le intente resolver los puntos de
> entrada?

Una mezcla de funciones como dlopen, dlsym, dlcose, etc, de las que
tienes m�s informaci�n en sus p�ginas de manual.

> Evidentemente la gracia est� en que una vez compilado,
> si necesidad de ser modificado ni recompilado, pueda cargar
> librer�as nuevas y diferentes, siempre que �stas hayan
> usado la declaraci�n de plugin.h como proto para la funci�n
> de "relaci�n" entre programa-principal y funciones-de-librer�a.

Lo normal es que tu programa use un plugin.h de comunicaci�n est�ndar,
con un par de funciones visibles, y el resto de las comunicaciones, o
a�ades m�s funciones a plugin.h o realizas la comunicaci�n mediante
estructuras que contengan la informaci�n.

Dicho de otra forma, supongamos que plugin.h tiene funciones como
startup, register, install, run y close. Pongamos que tu programa
requiere que todos los plugins est�n en un directorio concreto. Entonces
�nicamente tendr�as que recorrer ese directorio mediante opendir o
similar e ir pas�ndo los nombres a dlopen. Luego por cada plugin intentas
ejecutar la funci�n register o cualquier otra que tiene que devolver
un valor concreto o una informaci�n est�ndar para verificar que es un
plugin soportado por tu versi�n del ejecutable.

Si el plugin responde, pues es v�lido, y el resto de las comunicaciones
las realizas mediante run (...) o dem�s funciones que hayas a�adido
a plugin.h.

> Otra pregunta es si las librer�as cradas como .so sirven para
> tal efecto o se deben compilar de otra forma.

Creo que cualquier .so sirve. No obstante, las librer�as cargadas con
dlopen llaman a _init y y _fini, lo que no creo que ocurra con los .so
enlazados directamente con el binario.

-- 
 Grzegorz Adam Hankiewicz   gradha@terra.es   http://gradha.infierno.org
Technical Details
Message-ID: <9p12o9.ijg.ln@127.0.0.1>
Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!canoe.uoregon.edu!arclight.uoregon.edu!enews.sgi.com!news-out.spamkiller.net!propagator-la!news-in-la.newsfeeds.com!news-in.superfeed.net!caladan.arrakis.es!telenews.teleline.es!not-for-mail
References: <3BA3E2B3.40E8D8B9@dsitelecom.com>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,26ed3f936bc3887b
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2001-09-16 05:51:07 PST
Sender:  <gregorio@pedos.es>
From: gradha@iname.com
Subject: Re: Cargar librer�as din�micas sin estar presentes en  tiempo de compilaci�n.
Newsgroups: es.comp.os.linux.programacion
References: <3BA3E2B3.40E8D8B9@dsitelecom.com>
User-Agent: tin/1.4.1-19991201 ("Polish") (UNIX) (Linux/2.4.2-pre4 (i686))
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
Message-ID: <9p12o9.ijg.ln@127.0.0.1>
Lines: 46
Date: Sun, 16 Sep 2001 12:43:16 GMT
NNTP-Posting-Host: 195.235.97.105
X-Complaints-To: usenet@teleline.es
X-Trace: telenews.teleline.es 1000644196 195.235.97.105 (Sun, 16 Sep 2001 14:43:16 MET DST)
NNTP-Posting-Date: Sun, 16 Sep 2001 14:43:16 MET DST
Organization: Clientes_Teleline
Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!canoe.uoregon.edu!arclight.uoregon.edu!enews.sgi.com!news-out.spamkiller.net!propagator-la!news-in-la.newsfeeds.com!news-in.superfeed.net!caladan.arrakis.es!telenews.teleline.es!not-for-mail