gpt4 book ai didi

c - 体系结构 x86_64 错误的 Makefile 重复符号?

转载 作者:太空宇宙 更新时间:2023-11-04 03:20:41 27 4
gpt4 key购买 nike

我正在尝试为一个依赖于一个简单文件和一个存储在 c 文件中的函数的简单程序创建一个 makefile。以下是文件:

函数.c:

int random_fun(int n, int m)
{ int g;
n = n+m;
m=n/3;
g=n*m;
return g;
}

主.c:

#include <stdio.h>
#include "function.c"
int main()
{
int a, b;
printf("Enter numbers a, and b: ");
scanf("%d %d", &a, &b);
printf("Here is ur answer: %d", random_fun(a, b));
return 0;
}

这是我的生成文件:

OBJS = main.o function.o
program: $(OBJS)
$(CC) -o $@ $?
clean:
rm $(OBJS) program

每当我尝试输入 make 时,我都会收到以下错误:

duplicate symbol _random_fun in:
main.o
function.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see
invocation)
make: *** [program] Error 1"

不确定我做错了什么。我可以分别编译每个代码和主要作品。我正在处理的另一个项目遇到了同样的错误,所以我尝试了一个只涉及这 2 个 C 文件的非常简单的案例,但我遇到了同样的问题。我是 makefile 的新手,所以如果我犯了一个愚蠢的错误,请多多包涵。

最佳答案

您应该阅读 C 中定义和声明之间的区别。当您将 function.c 包含到您的 main.c 中时,您的函数 random_func 被定义了两次。链接器无法为您决定使用哪一个,因此会出错。对于您的用例,您应该在 main.c 或其他头文件中声明 random_func

关于c - 体系结构 x86_64 错误的 Makefile 重复符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46720412/

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