Ошибка компиляции программы TSS Trusted Platform Module (TPM) - PullRequest
1 голос
/ 06 августа 2020

Я новичок в TPM. Я хочу генерировать случайные байты с помощью TPM через интерфейс Esapi (esys). Я пытаюсь инициализировать Esys_Initialize(). Ниже мой код:

#include "/usr/include/tss2/tss2_esys.h"

int main(){
    
    TSS2_RC rc;
    size_t tcti_size;
    TSS2_TCTI_CONTEXT *tcti_context = NULL;
    TSS2_TCTI_CONTEXT *tcti_inner = NULL;
    ESYS_CONTEXT *esys_context;
    
    TSS2_ABI_VERSION abiVersion;
    abiVersion.tssCreator=0x1;
    rc=Esys_Initialize(&esys_context, tcti_context,&abiVersion);
    
    return 0;
}

Сообщение об ошибке:

[root@Centos8_machine tpm]# gcc test.c
/tmp/ccUvOoY1.o: In function
`main': test.c:(.text+0x32): undefined reference to `Esys_Initialize'
collect2: error: ld returned 1 exit status

Кто-нибудь может сказать, где я пропал? Заранее спасибо.

1 Ответ

1 голос
/ 06 августа 2020

Ошибка «Неопределенная ссылка» означает, что вы не связываете библиотеку, предоставляющую отсутствующий символ. В этом случае вам нужно связать библиотеку, которая предоставляет функцию Esys_Initialize.

Если вы компилируете вручную, вы можете использовать:

$ gcc $(pkg-config --cflags --libs tss2-esys) test.c

В этом случае я использовал pkg-config --list-all | grep tss, чтобы найти имя этого пакета. Вы также можете проверить необходимые флаги компилятора и компоновщика вручную:

$ pkg-config --cflags --libs tss2-esys
-I/usr/include/tss -ltss2-esys

Если вы не собираете вручную, но вам нужно использовать систему сборки (например, make, cmake, ...) или IDE, тогда вам придется добавить эти флаги компилятора (-I/usr/include/tss) и флаги компоновщика (-ltss2-esys) в ваши системы сборки. Конкретные шаги c будут зависеть от того, какую систему сборки вы используете.

...