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

Ubuntu20.04编译cpabe 0.11报DSO missing from command line错误求助

报错原因

该报错由GCC链接顺序错误导致。Ubuntu 20.04默认搭载的GCC 9版本默认开启--as-needed链接校验规则,要求库的链接顺序必须严格满足「依赖其他库的上层库排在前,被依赖的底层基础库排在后」的要求。
你当前的编译链接命令中,-lpbc(PBC库)排在-lgmp(GMP库)之前,但PBC库本身的运行依赖GMP库提供的函数,报错里提到的__gmpz_clear就是GMP库的导出符号,链接器扫描到PBC库的未定义符号时,还未处理到后续的GMP库,就会抛出DSO缺失、符号未定义的错误。

解决步骤
  • 进入cpabe源码根目录,先备份原有Makefile避免修改出错无法恢复:
    cp Makefile Makefile.bak
  • 打开Makefile文件,找到配置链接参数的行(一般是LDFLAGS字段或者直接写在编译目标规则里),将原有链接库的顺序调整为:
    -O3 -Wall -lglib-2.0 -Wl,-rpath /usr/local/lib -lpbc -lbswabe -lgmp -lcrypto

顺序规则参考:越上层的业务依赖库越靠前,越底层的基础依赖库越靠后。依赖链为cpabe -> libbswabe -> libpbc -> libgmp,同时cpabe、libbswabe还依赖glib、openssl crypto库,因此基础库gmp、crypto放在链接参数的最后即可。

  • 清理之前失败编译生成的中间文件:
    make clean
  • 重新执行编译命令:
    make
  • 编译无报错后,执行安装命令将二进制文件部署到系统路径:
    sudo make install
安装验证

安装完成后在终端执行cpabe-setup --help,如果能正常输出命令帮助信息,说明编译安装成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:27:25