Hay dos formas de objetos de carga compartida en C++
Para cualquiera de estos métodos siempre se necesitaría el archivo de cabecera para el objeto que desea utilizar. El encabezado contendrá las definiciones de las clases u objetos que quiera usar en su código.
estáticamente:
#include "blah.h"
int main()
{
ClassFromBlah a;
a.DoSomething();
}
gcc yourfile.cpp -lblah
dinámicamente (en Linux):
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int main(int argc, char **argv) {
void *handle;
double (*cosine)(double);
char *error;
handle = dlopen ("libm.so", RTLD_LAZY);
if (!handle) {
fprintf (stderr, "%s\n", dlerror());
exit(1);
}
dlerror(); /* Clear any existing error */
cosine = dlsym(handle, "cos");
if ((error = dlerror()) != NULL) {
fprintf (stderr, "%s\n", error);
exit(1);
}
printf ("%f\n", (*cosine)(2.0));
dlclose(handle);
return 0;
}
* Robados de dlopen Linux man page El proceso bajo las ventanas o cualquier otra plataforma es lo mismo, basta con sustituir dlopen con la versión plataformas de la búsqueda dinámica de símbolos.
Para que el método dinámico funcione, todos los símbolos que desea importar/exportar deben tener una vinculación C externa.
Hay algunas palabras Here sobre cuándo usar estática y cuándo usar el enlace dinámico.
Quizás estoy confundido pero no parece que haya suficiente información allí. ¿Qué contiene blah.so, por ejemplo? ¿Estás seguro de que no estás hablando solo de usar una referencia? – Goz
¿A qué te refieres con "compartido" exactamente? – Klaim
Err ... entonces los archivos no son archivos de código, ¿verdad? Tal vez quieras recuperar un objeto de a.¿archivo (biblioteca compartida)? – Klaim