【问题标题】:Linking error with opensc-pkcs与 opensc-pkcs 链接错误
【发布时间】:2014-03-31 14:35:46
【问题描述】:

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

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

示例代码sn-p如下:

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'。但也不是'U'。 有人可以建议发生了什么吗?提前致谢。

【问题讨论】:

    标签: pkcs#11 opensc


    【解决方案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); 
    

    【讨论】:

    • 感谢 jariq...它正在工作...链接问题消失了
    猜你喜欢
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 2012-10-23
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多