Arpeda
24-09-2005, 00:19
--------- Main.cpp -----------
#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>
int main ( )
{
void *handle;
void (*stampa)(void);
char *error;
handle = dlopen ("./libtest.so", RTLD_LAZY);
if (!handle)
{
fprintf (stderr, "dlopen %s\n", dlerror());
exit(1);
}
dlerror(); /* Clear any existing error */
*(void **) (&stampa) = dlsym(handle, "stampa");
if ((error = dlerror()) != NULL)
{
fprintf (stderr, "dlsym %s\n", error);
exit(1);
}
( *stampa )();
dlclose(handle);
return 0;
}
---------- libtest.cpp -----------------
#include <iostream>
using namespace std;
void stampa()
{
cout << "ciao sono la prima libreria dinamica che creo" << endl;
}
----------parametri compilazione -------------
g++ -rdynamic -o Main Main.cpp -ldl
g++ -fPIC -c libtest.cpp
g++ -shared -o libtest.so libtest.o
---------- errore -----------
dlsym ./libtest.so: undefined symbol: stampa
ho risolto mettendo:
extern "C" void stampa() {...}
ora perņ vorrei capire il perchč senza non funzica.
Qualcuno sa darmi una spiegazione?
#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>
int main ( )
{
void *handle;
void (*stampa)(void);
char *error;
handle = dlopen ("./libtest.so", RTLD_LAZY);
if (!handle)
{
fprintf (stderr, "dlopen %s\n", dlerror());
exit(1);
}
dlerror(); /* Clear any existing error */
*(void **) (&stampa) = dlsym(handle, "stampa");
if ((error = dlerror()) != NULL)
{
fprintf (stderr, "dlsym %s\n", error);
exit(1);
}
( *stampa )();
dlclose(handle);
return 0;
}
---------- libtest.cpp -----------------
#include <iostream>
using namespace std;
void stampa()
{
cout << "ciao sono la prima libreria dinamica che creo" << endl;
}
----------parametri compilazione -------------
g++ -rdynamic -o Main Main.cpp -ldl
g++ -fPIC -c libtest.cpp
g++ -shared -o libtest.so libtest.o
---------- errore -----------
dlsym ./libtest.so: undefined symbol: stampa
ho risolto mettendo:
extern "C" void stampa() {...}
ora perņ vorrei capire il perchč senza non funzica.
Qualcuno sa darmi una spiegazione?