【问题标题】:Undefined reference to strlcpy and strlcat对 strlcpy 和 strlcat 的未定义引用
【发布时间】:2021-05-02 18:46:55
【问题描述】:

我正在使用 strlcpy 和 strlcat 代替 strncat/cpy;然而,每当我去编译它 GCC -o Project Project.c 它会不断地通过我的错误说:

Undefined reference to strlcpy; Undefined reference to 'strlcat' 我的代码:

#include <bsd/string.h>
strlcpy(path, ARTICLEPATH, sizeof(ARTICLEPATH));
strlcat(path, ARTICLEPATH, sizeof(path));

我已将库添加到我的文件中,但它似乎继续向我抛出错误: #include &lt;bsd/string.h&gt;

我还有什么需要做的吗?还是有另一种使用空字节终止的 strncpy 替代方法?

编辑:作为背景,我在 ubuntu 20.04

【问题讨论】:

  • 我怀疑该问题的-lbsd 答案是您想要的答案。
  • @NateEldredge 你的意思是在我编译程序时添加 -lbsd 吗?即:gcc -o -lbsd project project.c ?
  • @JamesUkilin:是的,但是在最后加上-lbsdgcc -o project project.c -lbsd stackoverflow.com/questions/45135/… 它当然不能跟在-o 之后,否则你会将二进制文件写入一个名为./-lbsd 的文件中。
  • @NateEldredge 非常感谢你的帮助!

标签: c


【解决方案1】:

正如libbsd man page 中解释的那样,您需要链接libbsd 库以及包含标题。因此,在链接时将-lbsd 添加到您的命令行。对于一个简单的程序,你可能会这样做

gcc -o prog prog.c -lbsd

请注意,此处选项的顺序很重要,请参阅Why does the order in which libraries are linked sometimes cause errors in GCC? 如果您在命令行中将-lbsd 放在源文件之前,它可能不起作用。

您提出问题的方式表明您可能对标头和库之间的区别以及每个人所扮演的角色有些混淆。您可能想阅读What's the difference between a header file and a library?

(这几乎是 when I use strlcpy function in c the compilor give me an error 的重复,但这个问题更笼统,有些答案不适用于 Ubuntu,所以我认为单独的答案会很有用。)

【讨论】:

  • 工作就像一个魅力,非常感谢你
猜你喜欢
  • 2022-11-05
  • 2012-05-12
  • 2018-06-17
  • 2016-02-23
  • 2012-01-30
  • 2011-08-01
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多