可以从.h文件生成dlsym命令吗?
问题描述:
已经解决!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。
答
我使用decltype解决了这个问题。
typedef decltype(SDL_RenderDrawRects)* PF_SDL_RenderDrawRects;
这样,我不需要函数的参数列表。 The wrappers are found here。
尝试doxygen的xml输出,也许你比ctags得到更好的结果? –
我已经尝试过ctags,但结果并不令人满意 - 几个函数的参数列表因未知原因而中断,使我留下的参数列表不完整 - 大约240个函数中有240个出现此问题。我会尝试doxygen。 –
您可以使用[Implib.so](https://github.com/yugr/Implib.so)自动生成SDL API的包装,这将在需要时透明地缓存库(或称呼您的回调)。 – yugr