-1

我正在尝试编译一个示例 c 应用程序,该应用程序使用 pkcs#11 来查找令牌上的所有私钥,并打印它们的标签和 ID,但出现以下错误

/tmp/ccAqQ7UI.o: In function initialize':
pkcs11_example1.c:(.text+0x8e5): undefined reference to C_Initialize'
/tmp/ccAqQ7UI.o: In function `get_slot':

示例取自这里

使用以下命令编译;

 `gcc pkcs11_example1.c -o slots -L /usr/lib/opensc-pkcs11.so`

我不确定我应该在 -L 之后链接哪个库。任何人都可以指导如何编译它,是否需要链接一些库。

4

2 回答 2

2

C_Initialize 和其他 60 多个带有“C_”前缀的函数是PKCS#11 规范中定义的 cryptoki 函数。它们通常在 HSM 供应商提供的独立库中实现。查看您的代码示例,我会说您还需要直接链接 PKCS#11 库,或者您可以修改代码以在运行时使用LoadLibrarydlopen动态加载 PKCS#11 库,然后通过 C_GetFunctionList 调用获取指向所有 cryptoki 函数的指针. 您还可以查看pkcs11-logger 的源代码以获取有关如何执行此操作的示例。

于 2014-06-10T07:05:41.427 回答
0

您给出的链接命令gcc pkcs11_example1.c -o slots -L /usr/lib/opensc-pkcs11.so是错误的。

  • -L只需要路径,它被添加到从中搜索库的路径中,但是/usr/lib是默认的,所以你根本不需要这个开关。

  • 您缺少-l,它采用不带lib前缀或.so后缀的库名称,因此看起来您需要-lopensc-pkcs11.

因此,首先确保您的库文件确实是/usr/lib/libopensc-pkcs11.so(注意lib前缀!)可能带有版本号。然后更改构建选项,使链接命令变为

gcc pkcs11_example1.c -o slots -lopensc-pkcs11
于 2014-06-15T17:44:12.987 回答