Il y a deux façons d'objets partagés de chargement en C++
Pour l'une de ces méthodes que vous avez toujours besoin du fichier d'en-tête de l'objet que vous souhaitez utiliser. L'en-tête contiendra les définitions des classes ou des objets que vous souhaitez utiliser dans votre code.
statiquement:
#include "blah.h"
int main()
{
ClassFromBlah a;
a.DoSomething();
}
gcc yourfile.cpp -lblah
Dynamiquement (Sous 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;
}
* Stolen de dlopen Linux man page Le processus sous Windows ou toute autre plate-forme est le même, il suffit de remplacer dlopen avec la version plates-formes de la recherche dynamique de symboles. Pour que la méthode dynamique fonctionne, tous les symboles que vous voulez importer/exporter doivent avoir une liaison C extern'd.
Il y a des mots Here pour savoir quand utiliser la statique et quand utiliser la liaison dynamique.
Peut-être que je suis confus mais vous ne semblez pas avoir assez d'informations là-bas. Que contient blah.so, par exemple? Vous êtes sûr que vous ne parlez pas simplement d'utiliser une référence? – Goz
Que voulez-vous dire par "partagé" exactement? – Klaim
Err ... donc les fichiers ne sont pas des fichiers de code, non? Peut-être que vous voulez récupérer un objet d'un.Donc (fichier de bibliothèque partagée)? – Klaim