1

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

4

2 回答 2

1

您只需使用 dlsym() 一次即可获取 C_GetFunctionList() 函数的函数指针,该函数将返回带有指向所有其他函数的指针的结构。

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

于 2015-03-11T08:07:36.777 回答
1
  1. 您可能只是将您的应用程序与共享库链接而dlsym完全忘记。
  2. 您不必使用dlsym全部 68 种功能,而只需使用您真正需要的那些。
于 2015-03-10T19:41:37.357 回答