Можно ли генерировать команды dlsym из файла .h?

УЖЕ РЕШЕНО! Посмотрите результат здесь. эм>

Не уверен, правильно ли я спрашиваю, но кто-нибудь знает правильный способ создания команд dlopen и dlsym на основе файла .h?

Я пытаюсь динамически загрузить 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,

Обратите внимание на отсутствующие аргументы после интервала. Это сломано.

И я также видел это , и он, по-видимому, создается автоматически, а не вручную.

Итак... кто-нибудь знает какой-либо способ автоматического создания чего-то подобного? Специально для SDL2?

Или я должен просто использовать функции SDL и вручную выполнять их dlsym? Не спрашивайте, почему я не хочу просто ссылаться вместо использования dlopen и dlsym.


person Stephanus Tavilrond    schedule 18.07.2017    source источник
comment
Попробуйте вывод xml doxygen, возможно, вы получите лучшие результаты, чем ctags?   -  person Ben Voigt    schedule 19.07.2017
comment
Я уже пробовал ctags, но результаты были неудовлетворительными — у некоторых функций списки аргументов были сломаны по неизвестной причине, оставив меня с неполными списками аргументов — около 240 из 3500 функций столкнулись с этой проблемой. Доксиген попробую.   -  person Stephanus Tavilrond    schedule 19.07.2017
comment
Вы можете использовать Implib.so для автоматического создания оболочек для SDL API, которые будут прозрачно открывать библиотеку при необходимости. (или позвоните своему обратному вызову, чтобы сделать это).   -  person yugr    schedule 27.11.2017


Ответы (1)


Я решил эту проблему, используя decltype.

typedef decltype(SDL_RenderDrawRects)* PF_SDL_RenderDrawRects;

Таким образом, мне НЕ понадобится список аргументов для функции. Обертки находятся здесь.

person Stephanus Tavilrond    schedule 18.07.2017