对strlcpy和strlcat的未定义引用
我使用strlcpy和strlcat代替strncat/cpy;然而,每当我去编译它对strlcpy和strlcat的未定义引用,c,C,我使用strlcpy和strlcat代替strncat/cpy;然而,每当我去编译它 GCC-o Project.c它会不断地通过我的错误说: 对strlcpy的未定义引用;对“strlcat”的未定义引用 我的代码: #包括 strlcpy(path,ARTICLEPATH,sizeof(ARTICLEPATH)); strlcat(path,ARTICLEPATH,sizeof(path)); 我已将库添加到我的文件中,但它似乎继续向我抛出错误: #包括 我还有别的事要做吗?或者,除了使用
GCC-o Project.c
它会不断地通过我的错误说:
对strlcpy的未定义引用;对“strlcat”的未定义引用
我的代码:
#包括
strlcpy(path,ARTICLEPATH,sizeof(ARTICLEPATH));
strlcat(path,ARTICLEPATH,sizeof(path));
我已将库添加到我的文件中,但它似乎继续向我抛出错误:
#包括
我还有别的事要做吗?或者,除了使用空字节终止的strncpy,还有其他替代方法吗
编辑:作为背景,我在ubuntu 20.04上,正如中所解释的那样,您需要链接libbsd
库以及包含标题。因此,在链接时将-lbsd
添加到命令行。对于一个简单的程序,您可以这样做
gcc -o prog prog.c -lbsd
请注意,选项的顺序在这里很重要,如果在命令行中将-lbsd
放在源文件之前,则可能无法使用
您提问的方式表明,您可能对标题和库之间的区别以及每个标题和库所扮演的角色感到困惑。你可能想读书
(这几乎是重复的,但这个问题更一般,有些答案不适用于Ubuntu,所以我认为单独的答案会很有用。)这回答了你的问题吗?我怀疑关于这个问题的
-lbsd
答案就是你想要的。@NateEldredge你的意思是在我编译程序时添加-lbsd吗?Ie:gcc-o-lbsd project.c?@JamesUkilin:是的,但是把-lbsd
放在末尾gcc-o project.c-lbsd
它当然不能在-o
之后运行,否则您将把二进制文件写入名为/-lbsd
@NateEldredge的文件中。非常感谢您的帮助!工作很有魅力,非常感谢你
gcc -o prog prog.c -lbsd