2009-02-05 11 views
0

J'écris un programme qui est destiné à être étendu par certaines définitions de fonctions. Un des moyens de compiler le programme est de créer un exécutable unique reliant votre code au code principal. Le problème est: l'une des fonctions à définir est optionnelle et je dois tester cela.Vérification, à l'exécution, de l'existence d'une fonction dans un programme

Sur Linux, voici ce que je fais:

recompiler le programme avec l'option "-rdynamic" option g ++ ou "--export-dynamique" à ld. Utilisez ensuite ldsym comme ceci:

fct_type myfct = (fct_type)dlsym(RTLD_DEFAULT, "fct"); 

Si la fonction « fct » existe dans le programme, ce retourne son adresse, sinon, elle retourne NULL.

Maintenant, sur Windows, je suis censé être en mesure de le faire:

dll_handle = GetModuleHandle(0); 
fct_type myfct = (fct_type)GetProcAddress(dll_handle, "fct"); 

Mais il n'y a pas d'option "-rdynamic" ou "--export-dynamique" à g ++ sur MingW32! Donc ça ne marche pas. Est-ce que quelqu'un sait quoi faire sur Windows avec MinGW32?

Répondre

1

Ok, donc à la fin, je vais répondre à ma question ...

Vous devez créer un lien avec le drapeau -Wl,--export-all-symbols et il fonctionne ...