有没有办法防止dlsym(模块," functionName")每个函数?

时间:2015-03-10 17:01:50

标签: c shared-libraries pkcs#11 dlsym

我有一个共享库(更准确地说是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错误...

2 个答案:

答案 0 :(得分:1)

  1. 您可以将自己的应用与共享库相关联,然后完全忘记dlsym
  2. 您不必dlsym所有68个功能,只需要那些您真正需要的功能。

答案 1 :(得分:1)

你只需要使用dlsym()一次来获取C_GetFunctionList()函数的函数指针,它将返回带有指向所有其他函数的结构。

您可以在PKCS#11 v2.20 specification中找到第106页的示例代码。