0

PKCS#11 初期化のみを実行する基本コードの例をコンパイルしようとしていますが、次のエラーが発生します。

gcc pkcs11_example1.c -o pk -L /usr/lib64/pkcs11/opensc-pkcs11.so 
/tmp/cc8Dl0HE.o: In function `initialize':
pkcs11_example1.c:(.text+0x10): undefined reference to `C_GetFunctionList'
pkcs11_example1.c:(.text+0x2b): undefined reference to `assert'
collect2: error: ld returned 1 exit status

rpm コマンドは、次のようにパスを示します

rpm -ql opensc
/usr/lib64/libopensc.so.3
/usr/lib64/libopensc.so.3.0.0
/usr/lib64/libsmm-local.so.3
/usr/lib64/libsmm-local.so.3.0.0
/usr/lib64/opensc-pkcs11.so
/usr/lib64/pkcs11
/usr/lib64/pkcs11-spy.so
/usr/lib64/pkcs11/opensc-pkcs11.so
/usr/lib64/pkcs11/pkcs11-spy.so

私のコードは以下に貼り付けられます

CK_RV  
initialize()
{
    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);
    return rv;

}

int    
main(int argc, char **argv)
{
    rv = initialize();
}

それでもエラーが発生します

undefined reference to `C_GetFunctionList'

この問題を解決する方法を教えてください

4

2 に答える 2

0

あなたのエラーは、プログラムに正しいヘッダー (関数定義) があるが、その関数の実装ではないという事実に起因すると思います。DLL (この場合は opensc-pkcs11.so) に実装されている PKCS#11 関数を使用する前に、実際にそれをロードする必要があります。

私は UNIX システムでの DLL の読み込みのプロではありませんが、これでうまくいくはずです。

余談ですが、C_Initialize を呼び出した後は常に C_Finalize(...) を呼び出すことを強くお勧めします。

幸運を !

于 2016-05-10T14:55:58.523 に答える