Bonjour,
J'ai un programme principal qui charge dynamiquement une bibliothèque à l'exécution.
Cette bibliothèque a une interface précise :
Quand je charge ma bibliothèque, je recherche donc le symbole foo et je reçoit un void *.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class IBar { virtual void foo(void) = 0; virtual void faa(void) = 0; } IBar & foo(void);
Sauf que ma bibliothèque peut avoir plusieurs implémentations différentes et je n'ai aucune garantie de la validité des symboles dans une implémentation.
De plus, une bibliothèque peut se retrouver invalide si elle a été compilée avec un compilateur différent que celui qui a compilé l'exécutable.
J'ai donc pensé à compiler une bibliothèque "vide" :
Celle-ci pourrait être fournie avec l'exécutable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class IBar { virtual void foo(void) = 0; virtual void faa(void) = 0; } IBar & foo(void){}
Dès lors, j'aurais les symboles (ex. 3fooZA_IBar_foo_faa) exacts générés par le compilateur et je pourrais les comparer avec ceux de la bibliothèque que je chargerais.
Par contre, je n'ai pas beaucoup de connaissances sur les ABI des compilateurs, est-ce que vous auriez une idée pour effectuer cette comparaison de la manière la plus efficace possible ?
Partager