安装tpm2_pytss后运行测试报错:未定义符号Esys_MAC_Start_Async
解决tpm2_pytss导入时
Esys_MAC_Start_Async未定义符号错误 问题描述
安装tpm2_pytss后,运行其测试用例或自定义代码时出现如下导入错误:
Traceback (most recent call last): File "/home/xxxxxxxx/thesis/playground/quote.py", line 5, in <module> from tpm2_pytss import * File "/usr/local/lib/python3.9/dist-packages/tpm2_pytss/__init__.py", line 2, in <module> from .ESAPI import ESAPI File "/usr/local/lib/python3.9/dist-packages/tpm2_pytss/ESAPI.py", line 2, in <module> from .types import * File "/usr/local/lib/python3.9/dist-packages/tpm2_pytss/types.py", line 12, in <module> from ._libtpm2_pytss import ffi, lib ImportError: /usr/local/lib/python3.9/dist-packages/tpm2_pytss/_libtpm2_pytss.abi3.so: undefined symbol: Esys_MAC_Start_Async
TPM硬件及tpm2_tools工具均可正常工作,且已按要求安装所有依赖包。
解决方案
1. 检查tpm2-tss版本兼容性
Esys_MAC_Start_Async是tpm2-tss库中ESAPI模块的函数,未定义符号通常意味着tpm2_pytss与系统安装的tpm2-tss版本不匹配:
- 执行命令查看系统tpm2-tss版本:
pkg-config --modversion tpm2-tss - 确认版本满足tpm2_pytss要求(一般需
tpm2-tss >= 3.0.0),版本过低则升级tpm2-tss。
2. 从源码编译安装tpm2_pytss
pip预编译包可能与系统库存在兼容问题,建议直接从源码编译:
git clone https://github.com/tpm2-software/tpm2-pytss.git cd tpm2-pytss pip install -e .
编译过程会自动链接系统本地的tpm2-tss库,确保依赖匹配。
3. 验证库链接路径
检查tpm2_pytss的共享库是否正确链接系统tpm2-tss库:
- 执行命令查看依赖路径:
ldd /usr/local/lib/python3.9/dist-packages/tpm2_pytss/_libtpm2_pytss.abi3.so - 若链接错误版本,指定正确路径后重新安装:
export PKG_CONFIG_PATH=/path/to/your/tpm2-tss/lib/pkgconfig pip install --force-reinstall tpm2-pytss
4. 确认系统ESAPI库包含目标符号
验证系统tpm2-esys库是否存在Esys_MAC_Start_Async符号:
nm -D /usr/lib/x86_64-linux-gnu/libtpm2-esys.so | grep Esys_MAC_Start_Async
(库路径需根据系统架构和安装位置调整)
若无输出,说明系统tpm2-tss库缺少该符号,必须升级到对应版本。
内容的提问来源于stack exchange,提问作者Lucas Sousa
相关产品推荐
相关产品推荐

