GNU/Linux >> Tutoriels Linux >  >> Linux

Compilation dynamique de la bibliothèque partagée avec g++

dlsym renvoie un pointeur sur le symbole. (Comme void* être générique.) Dans votre cas, vous devez le convertir en un pointeur de fonction.

 double (*mycosine)(double); // declare function pointer
 mycosine = (double (*)(double)) dlsym(handle, "cos"); // cast to function pointer and assign

 double one = mycosine(0.0); // cos(0)

Donc, celui-ci de ces rares cas où l'erreur du compilateur est un bon indice.;)


C autorise les transtypages implicites à partir de void * à tout type de pointeur (y compris les pointeurs de fonction) ; C++ nécessite un casting explicite. Comme le dit leiflundgren, vous devez convertir la valeur de retour de dlsym() au type de pointeur de fonction dont vous avez besoin.

Beaucoup de gens trouvent la syntaxe du pointeur de fonction C maladroite. Un modèle courant consiste à typedef le pointeur de fonction :

typedef double (*cosine_func_ptr)(double);

Vous pouvez définir votre variable de pointeur de fonction cosine en tant que membre de votre type :

cosine_func_ptr cosine;

Et castez en utilisant le type au lieu de la syntaxe maladroite du pointeur de fonction :

cosine = (cosine_func_ptr)dlsym(handle, "cos");

Linux
  1. Convertir une bibliothèque statique en bibliothèque partagée ?

  2. Comment initialiser une bibliothèque partagée sous Linux

  3. Comment faire le versioning d'une bibliothèque partagée sous Linux ?

  4. Comment configurer googleTest en tant que bibliothèque partagée sous Linux

  5. Utiliser SDL2 sous Linux avec g++ ?

Détecter les bibliothèques partagées obsolètes en mémoire avec UChecker

Bash Scripting - Fonctions expliquées avec des exemples

Comment une bibliothèque partagée (.so) peut-elle appeler une fonction qui est implémentée dans son programme de chargement ?

Lier une bibliothèque partagée avec une autre bibliothèque partagée sous Linux

Comment savoir que la bibliothèque partagée donnée est construite avec des symboles de débogage ou non ?

Obtenir des noms de fonctions dans une bibliothèque partagée par programme