我使用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 <bsd/string.h>
还有什么我需要做的吗?或者,除了使用使用空字节终止的strncpy之外,还有另一种选择吗?
编辑:作为背景,我在ubuntu 20.04
发布于 2021-05-03 04:26:18
正如(某种程度上)在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,所以我认为单独的答案会很有用。)
https://stackoverflow.com/questions/67360010
复制相似问题