Article View: es.comp.os.linux.programacion
Article #11933Re: Cargar librer�as din�micas sin estar presentes en tiempo de compilaci�n.
From: gradha
Date: Sun, 16 Sep 2001 12:43
Date: Sun, 16 Sep 2001 12:43
46 lines
3413 bytes
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-mailReferences:
<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