将错误与opensc-pkcs链接

时间:2014-03-31 14:35:47

标签: pkcs#11 opensc

我正在尝试使用我在Redhat linux 5上构建的opensc-pkcs11.so。但是,当我尝试在示例程序中使用时,它会给出一个链接错误:

main.cpp:(.text+0x265): undefined reference to `C_Initialize'

示例代码段如下:

int main()
{
CK_RV l_rv = 0;     
l_rv = C_Initialize(NULL_PTR);
//other staffs ...

}

如果我看到opensc-pkcs11.so的nm输出,则显示:

-bash-3.2$ nm opensc-pkcs11.so |grep C_Initialize
0000000000008c70 t C_Initialize

't'是什么意思?我看到它不是'T'。但也不是'你'。 任何人都可以提出正在发生的事情吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

PKCS#11库opensc-pkcs11.so是作为OpenSC项目exports only C_GetFunctionList函数的一部分开发的,它提供了指向所有其他PKCS#11函数的指针。使用dlopen()动态加载PKCS#11库时非常有用,因为您不需要使用dlsym()调用获取所有60多个函数的函数指针。

在你的情况下,你需要先调用C_GetFunctionList,然后通过返回的指针调用其余的函数。以下是RSA Security Inc.创建的PKCS#11 v2.20规范的示例:

CK_FUNCTION_LIST_PTR pFunctionList; 
CK_C_Initialize pC_Initialize; 
CK_RV rv; 

/* It’s OK to call C_GetFunctionList before calling 
C_Initialize */ 
rv = C_GetFunctionList(&pFunctionList); 
assert(rv == CKR_OK); 
pC_Initialize = pFunctionList -> C_Initialize; 

/* Call the C_Initialize function in the library */ 
rv = (*pC_Initialize)(NULL_PTR);