gpt4 book ai didi

c - 如何在 c-未定义的引用中将 strlcpy 链接到 `strlcpy'

转载 作者:行者123 更新时间:2023-12-04 18:38:31 26 4
gpt4 key购买 nike

我是 C 编程和 Makefile 的新手。
我的 c 代码中有一个函数,它使用 strlcpy 来复制字符串。
我不允许在我的代码中使用 #include 所以我已经包含了 #include
但是在编译makefile时,
收到错误:
/ usr/bin/ld: reg_maker.o: 在函数 main': /home/reg_maker.c:66: undefined reference to 字符串'
/usr/bin/ld:/home/reg_maker.c:67: 未定义对“strlcpy”的引用

下面是我使用的makefile:

OUT=reg_maker
OBJS=reg_maker.o
CC=gcc
IDIR = -I../../../include -I../../../include/xxxx -I/usr/include/json-c/ -I/usr/lib/x86_64-linux-gnu/glib-2.0/include/ -I/usr/include/glib-2.0 -I/usr/include
FLAGS= -c -g -Wall
LFLAGS= -lcrypto -ljson-c -lglib-2.0
all: $(OBJS)
$(CC) -g $(OBJS) -o $(OUT) $(LFLAGS)

reg_maker.o:reg_maker.c
$(CC) $(FLAGS) reg_maker.c $(IDIR) $(LFLAGS)
clean:
rm -f $(OBJS) $(OUT) reg_maker.bin`
我正在使用 ubuntu vm version- 20.04 ,我有 glib-2.0 库。
谁能帮我看看我必须在make文件中做些什么改变才能用strlcpy编译它
提前致谢

最佳答案

使用 BSD 函数的代码 strlcpystrlcat应与 libbsd 链接.如果您的系统上没有此库,您可以在自己的程序中添加这些函数的源代码:

#include <string.h>

size_t strlcpy(char *dst, const char *src, size_t n) {
char *p = dst;

if (n != 0) {
for (; --n != 0; p++, src++) {
if ((*p = *src) == '\0')
return p - dst;
}
*p = '\0';
}
return (p - dst) + strlen(src);
}

size_t strlcat(char *dst, const char *src, size_t n) {
char *p = dst;

while (n != 0 && *p != '\0') {
p++;
n--;
}
if (n != 0) {
for (; --n != 0; p++, src++) {
if ((*p = *src) == '\0')
return p - dst;
}
*p = '\0';
}
return (p - dst) + strlen(src);
}

关于c - 如何在 c-未定义的引用中将 strlcpy 链接到 `strlcpy',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72492507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com