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

Ubuntu安装libbsd后链接器找不到strnstr()的原因排查

问题原因与解决方法

核心原因:链接器的库顺序要求

gcc调用的GNU链接器ld遵循严格的库文件后置规则:链接器处理库文件时,只会将当前已发现的未定义符号对应的库代码纳入链接流程。如果把-lbsd放在源文件test-strnstr.c前面,链接器处理libbsd时还未识别到需要strnstr的代码,就不会提取该符号;后续处理源文件时发现未定义的strnstr,已无对应库可匹配,因此报undefined reference错误。

而clang的链接器(或其默认配置)对库顺序的容忍度更高,即使库参数放在源文件前也能正确解析符号,所以可以正常运行。

解决方法

调整编译命令的顺序,将源文件放在库参数之前:

cc test-strnstr.c -lbsd

额外说明

  • MacOS环境差异:MacOS的系统C标准库libc本身内置了strnstr函数,因此无需引入bsd/string.h头文件,也不用链接额外库即可编译运行。
  • Ubuntu环境的依赖:Ubuntu 22.04的系统libc不包含strnstr,必须通过libbsd-dev包提供的bsd/string.h声明和libbsd库来获取该函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:55:59