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

GCC编译调用strlcpy报undefined reference错误如何解决

报错原因

strlcpy是BSD起源的非标准C库函数,主流Linux发行版自带的glibc在2.38版本之前都没有内置该函数实现。你代码里引入<bsd/string.h>仅能让编译阶段找到函数声明,链接阶段没有关联对应的BSD兼容库,就会抛出undefined reference to 'strlcpy'的链接错误。

修复方法

你可以根据自己的系统情况二选一操作:

方案1:兼容所有主流Linux版本(推荐)

  • 先安装BSD兼容库的开发包:
    • Debian/Ubuntu 系列系统执行:sudo apt install libbsd-dev
    • RHEL/CentOS/Fedora 系列系统执行:sudo dnf install libbsd-devel
    • macOS 内核为BSD派生,系统自带strlcpy实现,无需额外安装依赖。
  • 编译时追加链接参数关联libbsd库,将原编译命令修改为:
    gcc -Wall -Wextra -Werror ft_strlcpy.c -lbsd

方案2:仅适用于高版本系统(glibc >= 2.38,如Ubuntu 24.04、Fedora 39及以上)

不需要额外安装依赖,修改两处代码即可:

  1. 在所有头文件引入之前添加宏定义:#define _DEFAULT_SOURCE
  2. 将代码里的#include <bsd/string.h>替换为#include <string.h>
    修改后用你原来的编译命令即可正常编译运行。
注意事项

等你测试完原生strlcpy的逻辑、开始编写自己的ft_strlcpy实现时,记得删掉相关的BSD头文件引入、_DEFAULT_SOURCE宏定义以及编译时的-lbsd链接参数,避免和你自己编写的函数产生命名冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:42:25