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

Ubuntu静态编译链接libnftnl提示cannot find -lnftnl如何排查

链接错误原因

/usr/bin/ld: cannot find -lnftnl报错由两个配置问题直接导致:

  • Ubuntu环境下通过apt安装的libnftnl-dev、libnftnl11包,库存放路径为/usr/lib/x86_64-linux-gnu/(x86_64架构默认路径,arm架构路径为/usr/lib/aarch64-linux-gnu/),编译命令中手动指定的/usr/local/lib/路径下不存在libnftnl库文件,链接器搜索失败。
  • 编译命令中添加了-static静态编译参数,但默认apt安装的libnftnl、libmnl相关包默认不附带静态库文件(静态库后缀为.a,apt安装的dev包默认仅提供后缀为.so的动态库链接入口),即使修正路径,静态编译也会因缺少静态库文件报错。
修复方案

根据编译需求二选一即可:

方案1:使用动态编译(推荐,无额外依赖安装)

直接移除错误的路径指定参数和静态编译参数,使用系统默认库搜索路径编译即可,命令如下:

gcc x.c -o x -lnftnl -lmnl

系统默认会自动扫描架构对应的库存放路径,无需手动添加-L参数即可找到已安装的libnftnl、libmnl动态库。

方案2:必须使用静态编译

  1. 先补全依赖的静态库文件,执行命令重装dev包确认静态文件就位:
sudo apt update && sudo apt install --reinstall libnftnl-dev libmnl-dev
  1. 修正编译命令中的库搜索路径为系统库存放路径,x86_64架构可直接使用如下命令:
gcc x.c -o x -static -L/usr/lib/x86_64-linux-gnu/ -lnftnl -lmnl
  1. 如果执行后仍提示缺少libc、libz这类系统级静态库,执行命令安装基础静态依赖包即可:
sudo apt install libc6-dev zlib1g-dev
校验方法

编译前可以先执行命令确认库文件真实存在,避免路径配置错误:

  • 查询libnftnl库文件位置:dpkg -L libnftnl-dev | grep libnftnl
  • 查询libmnl库文件位置:dpkg -L libmnl-dev | grep libmnl
    正常返回结果中会包含对应.so(动态库)或.a(静态库)文件的完整路径,编译时-L参数指定到该文件所在目录即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:45:30