Есть ли способ предотвратить dlsym (module, functionName) каждую функцию?

У меня есть разделяемая библиотека (точнее, модуль PKCS#11), и я хочу написать приложение, которое может загружать библиотеку и использовать ее.

В настоящее время я использую dlsym следующим образом:

My_C_GetSlotList = (CK_C_GetSlotList) dlsym (module, "C_GetSlotList");
if (!My_C_GetSlotList)  printf("Couldn't find function 'C_GetSlotList' in library: %s: %s\n", filename, dlerror ());

Но в библиотеке около 68 функций. Я думаю, настоящий вопрос: действительно ли мне нужно делать это для каждой функции? Есть ли структура со списком всех функций? Может быть, я просто неправильно использую dlsym...


person Sindbad    schedule 10.03.2015    source источник


Ответы (2)


Вам нужно использовать dlsym() только один раз, чтобы получить указатель функции для функции C_GetFunctionList(), которая вернет вам структуру с указателями на все остальные функции.

Вы можете найти пример кода на странице 106 в спецификации PKCS#11 v2.20< /а>.

person jariq    schedule 11.03.2015

  1. Вы можете просто связать свое приложение с общей библиотекой и полностью забыть dlsym.
  2. Вам не нужно dlsym использовать все 68 функций, а только те, которые вам действительно нужны.
person Matt    schedule 10.03.2015
comment
Но я хочу иметь возможность использовать другую общую библиотеку с теми же функциями. А в моем случае мне нужны все функции. - person Sindbad; 11.03.2015