2014-03-31 93 views
0

我想使用opensc-pkcs11.so我已經建立在RedHat Linux 5。但是,當我嘗試在樣本程序中使用它給一個鏈接錯誤:與opensc-PKCS鏈接錯誤

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它顯示的納米輸出:

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

't'是什麼意思?我看到它不是'T'。但也不是'U'。 有人可以提出發生了什麼?提前致謝。

回答

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); 
+0

我不能將問題標記爲「已接受」,但仍是完美答案。謝謝! –

+0

謝謝jariq ......它正在工作......鏈接問題消失了 – saby