2017-07-18 48 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