2017-07-18 4 views
1

DÉJÀ RÉSOLU!See the result here.Les commandes dlsym peuvent-elles être générées à partir d'un fichier .h?

Je ne sais pas si je demande au bon endroit, mais est-ce que quelqu'un sait comment générer des commandes dlopen et dlsym à partir d'un fichier .h? Je tente de charger dynamiquement SDL2 - qui est une bibliothèque écrite en C - mais toutes les méthodes d'extraction de la liste des fonctions et de leurs arguments avec ctags semblent inutiles (devoir corriger manuellement les listes d'arguments pour 240 fonctions sur 3500 est pas drôle).

ctags -R -x --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f sdl /usr/include/SDL2/ 

Les résultats de ctags ressemblent à ceci:

extern DECLSPEC int SDLCALL SDL_SetTextureColorMod (SDL_Texture * texture, 
extern DECLSPEC int SDLCALL SDL_SetThreadPriority (SDL_ThreadPriority priority); 
extern DECLSPEC void SDLCALL SDL_SetWindowBordered (SDL_Window * window, 

Ce:

ctags -R -x --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f sdl /usr/include/SDL2/ | grep "SDL_AddTimer" 

Rendements ce genre de résultat:

SDL_AddTimer  prototype 93 /usr/include/SDL2/SDL_timer.h extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, 

Notez les arguments manquants après l'intervalle . C'est cassé.

Et j'ai aussi vu this être une chose, et il est apparemment généré automatiquement, pas fait à la main. Alors, est-ce que quelqu'un connaît un moyen de générer automatiquement quelque chose de similaire? Surtout pour SDL2? Ou devrais-je simplement utiliser les fonctions SDL et les dlsym manuellement? Ne demandez pas pourquoi je ne veux pas simplement lier au lieu d'utiliser dlopen et dlsym.

+0

Essayez la sortie xml de doxygen, peut-être obtenez-vous de meilleurs résultats que ctags? –

+0

J'ai déjà essayé des ctags, mais les résultats n'étaient pas satisfaisants - plusieurs fonctions avaient leurs listes d'arguments brisées pour une raison inconnue, me laissant avec des listes d'arguments incomplètes - environ 240 sur 3500 fonctions ont souffert de ce problème. Je vais essayer doxygen. –

+0

Vous pouvez utiliser [Implib.so] (https://github.com/yugr/Implib.so) pour générer automatiquement des wrappers pour les API SDL qui pourraient ouvrir la bibliothèque de manière transparente si nécessaire (ou appeler votre callback pour le faire). – yugr

Répondre

2

J'ai résolu ce problème en utilisant decltype.

typedef decltype(SDL_RenderDrawRects)* PF_SDL_RenderDrawRects; 

De cette façon, je ne vais pas avoir besoin de la liste des arguments de la fonction. The wrappers are found here.