You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM平台tpm2-tss交叉编译make install失败求助

ARM平台交叉编译tpm2-tss时make install失败问题

问题场景

交叉编译ARM平台的tpm2-tss,configure和make步骤均正常完成,但执行make install时出现文件找不到的错误。

错误日志

[/app/workspace/tpm2-openssl-1.2.0/tpm2-tss]$ make install
make[1]: Entering directory '/app/workspace/tpm2-openssl-1.2.0/tpm2-tss'
 /usr/bin/mkdir -p '/usr/local/lib'
 /bin/bash ./libtool   --mode=install /usr/bin/install -c   src/tss2-mu/libtss2-mu.la src/tss2-tcti/libtss2-tctildr.la    src/tss2-tcti/libtss2-tcti-device.la    src/tss2-tcti/libtss2-tcti-swtpm.la    src/tss2-tcti/libtss2-tcti-mssim.la    src/tss2-tcti/libtss2-tcti-pcap.la src/tss2-tcti/libtss2-tcti-cmd.la    src/tss2-tcti/libtss2-tcti-spi-helper.la    src/tss2-tcti/libtss2-tcti-spi-ltt2go.la    src/tss2-tcti/libtss2-tcti-spidev.la    src/tss2-tcti/libtss2-tcti-i2c-helper.la src/tss2-sys/libtss2-sys.la    src/tss2-esys/libtss2-esys.la src/tss2-rc/libtss2-rc.la    src/tss2-policy/libtss2-policy.la src/tss2-fapi/libtss2-fapi.la    '/usr/local/lib'
libtool: install: /usr/bin/install -c src/tss2-mu/.libs/libtss2-mu.so.0.0.1    /usr/local/lib/libtss2-mu.so.0.0.1
/usr/bin/install: cannot stat 'src/tss2-mu/.libs/libtss2-mu.so.0.0.1': No such file or directory
make[1]: *** [Makefile:12466: install-libLTLIBRARIES] Error 1

补充信息

  • 报错提示找不到的libtss2-mu.so.0.0.1实际存在于/usr/local/lib,是指向工具链目录的软链接:
[/usr/local/lib]$ ls -lrth
total 149K
drwxr-xr-x 3 root root    3 Jun  5 03:39 python3.10
drwxr-xr-x 1 root root    3 Jun  5 03:40 python3.11
lrwxrwxrwx 1 root root   91 Sep 18 13:13 libtss2-mu.so.0.0.1 -> /opt/toolchains/foo/blabla/armv7ahf-neon-oe-linux-gnueabi/usr/lib/libtss2-mu.so.0.0.0
  • 已设置LD_LIBRARY_PATH,并修改了.la文件的dependency_libs字段为:dependency_libs=' -L/opt/toolchains/foo/blabla/armv7ahf-neon-oe-linux-gnueabi/usr/lib'
  • 交叉编译命令:
CFLAGS="-Wno-error=missing-field-initializers" ./configure    --build=x86_64-pc-linux-gnu --host=arm-oe-linux-gnueabi --prefix=/usr/local

解决思路

  1. 检查编译产物路径
    报错里libtool试图从编译目录的src/tss2-mu/.libs/下复制文件,但该路径下没有生成目标文件,说明交叉编译时可能直接复用了工具链里的预编译库,跳过了本地编译。这种情况下make install会因为找不到本地编译产物而失败。

  2. 修改configure参数强制本地编译
    交叉编译时如果工具链中存在同名库,configure可能会跳过本地编译。可以添加--with-sysroot参数指定工具链根目录,确保configure优先使用指定路径下的资源并生成本地编译产物:

    CFLAGS="-Wno-error=missing-field-initializers" ./configure --build=x86_64-pc-linux-gnu --host=arm-oe-linux-gnueabi --prefix=/usr/local --with-sysroot=/opt/toolchains/foo/blabla/armv7ahf-neon-oe-linux-gnueabi
    
  3. 清理后重新编译
    先清理之前的编译残留文件,避免干扰:

    make distclean
    

    再重新执行configure、make、make install流程。

  4. 指定工具链libtool
    交叉编译时libtool可能需要使用工具链自带的版本,避免用主机系统的libtool导致兼容问题:

    export LIBTOOL=/opt/toolchains/foo/blabla/armv7ahf-neon-oe-linux-gnueabi/usr/bin/libtool
    CFLAGS="-Wno-error=missing-field-initializers" ./configure --build=x86_64-pc-linux-gnu --host=arm-oe-linux-gnueabi --prefix=/usr/local
    
  5. 临时手动复制库文件
    如果需要快速解决,可以手动将工具链中的库文件复制到编译目录对应路径,再执行make install:

    mkdir -p src/tss2-mu/.libs/
    cp /opt/toolchains/foo/blabla/armv7ahf-neon-oe-linux-gnueabi/usr/lib/libtss2-mu.so.0.0.0 src/tss2-mu/.libs/libtss2-mu.so.0.0.1
    make install
    

    此为临时方案,建议优先解决编译过程的根本问题。

内容的提问来源于stack exchange,提问作者user190549

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 10:35:06