有没有办法阻止 dlsym (module, "functionName") 每个函数?
Is there a way to prevent dlsym (module, "functionName") every function?
我有一个共享库(更准确地说是一个 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 ...
- 您可能 link 您的应用程序带有共享库,而完全忘记
dlsym
。
- 您不必
dlsym
所有 68 个函数,但只需要那些您真正需要的函数。
您只需使用 dlsym() 一次即可获取 C_GetFunctionList() 函数的函数指针,该函数将 return 您使用指向所有其他函数的指针构建。
您可以在 PKCS#11 v2.20 specification 中找到第 106 页的示例代码。
我有一个共享库(更准确地说是一个 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 ...
- 您可能 link 您的应用程序带有共享库,而完全忘记
dlsym
。 - 您不必
dlsym
所有 68 个函数,但只需要那些您真正需要的函数。
您只需使用 dlsym() 一次即可获取 C_GetFunctionList() 函数的函数指针,该函数将 return 您使用指向所有其他函数的指针构建。
您可以在 PKCS#11 v2.20 specification 中找到第 106 页的示例代码。