可信平台模块 (TPM) TSS 程序编译错误

Trusted Platform Module (TPM) TSS program compilation error

我是 TPM 新手。我想通过 Esapi(esys) 接口使用 TPM 生成随机字节。我正在尝试初始化 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

谁能告诉我哪里不见了? 提前致谢。

“未定义引用”错误意味着您没有 link反对提供缺失符号的库。在这种情况下,您需要 link 针对提供 Esys_Initialize 功能的库。

如果您手动编译,您可以使用:

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

在这种情况下,我使用 pkg-config --list-all | grep tss 来查找此包的名称。您还可以手动检查所需的编译器和 linker 标志:

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

如果您不是手动构建而是需要使用构建系统(例如 make、cmake 等)或 IDE,那么您必须添加这些编译器标志(-I/usr/include/tss) 和 linker 标志 (-ltss2-esys) 到您的构建系统。具体步骤取决于您使用的构建系统。