🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

[Me respondo] Re: Cargar librerías dinámicas sin estar presentes en tiempo de compilación.

#11928
From: Xavier Montero
Date: Sun, 16 Sep 2001 01:33
79 lines
3721 bytes
Me respondo: La soluci�n est� aqu�.

http://www.linuxdoc.org/HOWTO/Program-Library-HOWTO/index.html

Para el ejemplo que propon�a, ambos plugins los he renombrado
de .cpp a .c y he compilado con gcc en vez de g++. Esto es
porque la tabla de s�mbolos de C es "normal" y el s�mbolo de
la funci�n "gimmelafrase()" se llama "gimmelafrase" en C,
pero en C++ era algo como "gimmelafrase__Fv" y hasta que no
descubra oficialmente de d�nde sale lo del __Fv a�adido y 
qu� casos me puedo encontrar pasar� de usarlo.

Para el main, donde dec�a "qu� c�digo usar?" he inclu�do
la librar�a #include <dlfcn.h> como dice el howto y
en el c�digo he a�adido las llamadas a las funciones
dlopen, dlerror, dlsym y dlclose. El c�digo queda as�:

------ BEGIN OF SESSION ------
 
xavi@inspire:~/plugintest/plugin_test$ cat plugin_test.c
#include <stdio.h>
#include <dlfcn.h>
int main(int c, char ** a)
{
        void * libh;
        char * (*gimmelafrase) (void);
        char * error;
	//[C�digo de comprobaci�n de par�metros]

	printf("Trying to load library: '%s'\n", a[1]);
	if ( ( libh = dlopen( a[1], RTLD_NOW )) == NULL )
        {
		// Oops! The library could not be open!
		printf("Library could not be open. Reason: %s\n", dlerror() );
	}
	else
	{
		// Good! We could load the library!
		gimmelafrase = dlsym( libh, "gimmelafrase" );

		if ((error = dlerror()) != NULL)
		{
			fprintf (stderr, "%s", error);
			exit(1);
		}
		printf("%s\n", (*gimmelafrase)() );
		dlclose( libh );
	}
}
xavi@inspire:~/plugintest/plugin_test$

------ END OF SESSION ------

Y el resultado es lo esperado: El programa carga y ejecuta c�digo
objeto compilado en tiempo de ejecuci�n:

------ BEGIN OF SESSION ------

xavi@inspire:~/plugintest/plugin_test$ ./plugin_test
/home/xavi/plugintest/plugin_a/plugin_a.so
Trying to load library: '/home/xavi/plugintest/plugin_a/plugin_a.so'
This is the output of plugin a
xavi@inspire:~/plugintest/plugin_test$ ./plugin_test
/home/xavi/plugintest/plugin_b/plugin_b.so
Trying to load library: '/home/xavi/plugintest/plugin_b/plugin_b.so'
----- oooh, i'm plugin BBBB ----
xavi@inspire:~/plugintest/plugin_test$

------ END OF SESSION ------

Fijaos que el output del programa viene alimentado en cada una de
las 2 invocaciones por lo que el plugin ha devuelto.

Espero que sea de utilidad si alguien quiere hacer programas
"extensibles" por otras personas.

As� que... duda autosolucionada.
Saludos.
Xavi.
Technical Details
Message-ID: <3BA4016F.23ACC509@dsitelecom.com>
Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!news.tele.dk!small.news.tele.dk!193.251.151.101!opentransit.net!newsfeed.comtenidos.com!newsfeeder.wanadoo.es!news.antakira.com!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-15 19:06:52 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!news.tele.dk!small.news.tele.dk!193.251.151.101!opentransit.net!newsfeed.comtenidos.com!newsfeeder.wanadoo.es!news.antakira.com!not-for-mail
From: Xavier Montero <xmontero@dsitelecom.com>
Newsgroups: es.comp.os.linux.programacion
Subject: [Me respondo] Re: Cargar librerías dinámicas sin 
 estar presentes en tiempo de compilación.
Date: Sun, 16 Sep 2001 03:33:35 +0200
Organization: Digital Sound Items
Lines: 79
Message-ID: <3BA4016F.23ACC509@dsitelecom.com>
References: <3BA3E2B3.40E8D8B9@dsitelecom.com>
NNTP-Posting-Host: 212.25.147.135
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: news.wanadoo.es 1000605858 16615 212.25.147.135 (16 Sep 2001 02:04:18 GMT)
X-Complaints-To: usenet@wanadoo.es
NNTP-Posting-Date: Sun, 16 Sep 2001 02:04:18 +0000 (UTC)
X-Mailer: Mozilla 4.77 [en] (Windows NT 5.0; U)
X-Accept-Language: en