无法编译读取智能卡的ac应用程序
我正在尝试编译一个示例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之后我应该链接哪个库。 任何人都可以指导如何编译它,是否有一些库需要链接。
具有“C_”前缀的C_Initialize和其他60多个函数是PKCS#11规范中定义的cryptoki函数。 它们通常在HSM供应商提供的独立库中实现。 查看代码示例,我会说您需要直接链接PKCS#11库,或者您可以修改代码以在运行时使用LoadLibrary或dlopen动态加载PKCS#11库,然后通过C_GetFunctionList调用获取指向所有cryptoki函数的指针。 您还可以查看pkcs11-logger源代码 ,了解如何执行此操作的示例。
您提供的链接命令, gcc pkcs11_example1.c -o slots -L /usr/lib/opensc-pkcs11.so
,是错误的。
-
-L
只接受路径,它被添加到搜索libs的路径中,但是/usr/lib
是默认的,所以你根本不需要这个开关。 -
你缺少
-l
,它使用没有lib前缀或.so后缀的库名,所以看起来你需要-lopensc-pkcs11
。
因此,首先确保您的库文件确实是/usr/lib/libopensc-pkcs11.so
(注意lib前缀!),可能跟随以下版本号。 然后更改构建选项,以便链接命令变为
gcc pkcs11_example1.c -o slots -lopensc-pkcs11