2017-07-18 37 views
1

已经解决!See the result here可以从.h文件生成dlsym命令吗?

不知道我是否在正确的地方问,但有没有人知道基于.h文件生成dlopen和dlsym命令的正确方法?

我想动态加载SDL2 - 这是一个用C编写的库 - 但所有提取函数列表和他们的参数与ctags的方法似乎没有结果(必须手动更正240个函数的参数列表3500是不好玩)。

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

从ctags的结果是这样的:

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, 

此:

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

息率这种结果:

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

通知时间间隔后缺少参数。它坏了。

而且我还看到this是一件东西,它显然是自动生成的,而不是手动生成的。

所以...有没有人知道任何方式来自动生成类似的东西?特别是对于SDL2?

或者我应该只使用SDL函数,并手动dlsym它们?不要问为什么我不愿意只是链接而不是使用dlopen和dlsym。

+0

尝试doxygen的xml输出,也许你比ctags得到更好的结果? –

+0

我已经尝试过ctags,但结果并不令人满意 - 几个函数的参数列表因未知原因而中断,使我留下的参数列表不完整 - 大约240个函数中有240个出现此问题。我会尝试doxygen。 –

+0

您可以使用[Implib.so](https://github.com/yugr/Implib.so)自动生成SDL API的包装,这将在需要时透明地缓存库(或称呼您的回调)。 – yugr

回答

2

我使用decltype解决了这个问题。

typedef decltype(SDL_RenderDrawRects)* PF_SDL_RenderDrawRects; 

这样,我不需要函数的参数列表。 The wrappers are found here

相关问题