gpt4 book ai didi

c - 我如何理解这个编译器错误: "multiple definition of ..."

转载 作者:行者123 更新时间:2023-11-30 18:19:19 24 4
gpt4 key购买 nike

我正在做考试作业。大约还有 6 个小时就到了。突然我的程序无法再编译并出现以下错误消息:

gcc -g -D DEBUG -c -o obj/stringops.o src/stringops.cgcc -g -D DEBUG -c -o obj/arrayops.o src/arrayops.cgcc -g -D DEBUG -c -o obj/fileops.o src/fileops.cgcc -g -D DEBUG -c -o obj/builtins.o src/builtins/*.cgcc -g -D DEBUG -c -o obj/tomashell.o src/tomashell.cgcc -g -D DEBUG -o bin/tomashell \                obj/stringops.o obj/arrayops.o obj/fileops.o obj/builtins.o \                obj/tomashell.oobj/tomashell.o: In function `n_processes':/root/sc/tomashell/src/safefork.c:11: multiple definition of `h_meta'obj/builtins.o:/root/sc/tomashell/src/builtins/history.c:4: first defined hereobj/tomashell.o: In function `n_processes':/root/sc/tomashell/src/safefork.c:11: multiple definition of `h_meta_len'obj/builtins.o:/root/sc/tomashell/src/builtins/history.c:4: first defined herecollect2: ld returned 1 exit statusmake: *** [bin/tomashell] Error 1

In this file:

#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/errno.h>

extern int errno;

#define MAX_PROCESSES 6

static int n_processes(void)
{ // <- THIS IS LINE 11
return system("exit `ps | wc -l`")/256;
}


pid_t safefork(void)
{
static int n_initial = -1;

if (n_initial == -1)
n_initial = n_processes();
else if (n_processes() >= n_initial+MAX_PROCESSES) {
sleep(2);
errno = EAGAIN; return (pid_t)-1;
}

return fork();
}

请有人帮助我或杀了我。我不想生活在一个可能出现此类错误的世界中。

对可能出现的问题有什么想法吗?

builtins/history.c
builtins/history.h

最佳答案

正如我在评论中提到的,问题在于 h_metah_meta_len 的多个定义 - 因为它们是在 .h 文件中定义的包含在多个翻译单元中,或者由于 .c(带有变量的定义,直接或包含在包含的 .h 中)包含在另一个 .c 中。包含防护可以避免编译错误,但不能避免链接错误。

这给我带来了奇怪的错误消息:您在链接时收到这些消息。链接器对目标文件进行操作,其中包含 .c 文件中的代码及其包含的所有文件。因此,假设 h_meta 和friend 没有直接在两个.c 文件中定义,则链接器只能做这么多来为您提供有用的信息。在 VC 中,您只会收到一条消息,告诉您有多个定义和目标文件列表(而不是 .c)。

因此,鉴于定义来自上述 .c 文件中包含的文件,因此定义没有实际的行号。我猜 GCC 只是默认到源代码的开头。

关于c - 我如何理解这个编译器错误: "multiple definition of ...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7757234/

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