构建时“链接错误:在模块中复制public_main”

时间:2013-08-25 07:11:45

标签: c linker

我在一个工作区域下创建了一个简单文件,构建并成功执行。并再次在同一工作区域下创建了另一个文件。我收到链接错误,如:

构建时

"====Linking===== Error: Duplicate public_main in module....",当我尝试执行第一个文件时,我收到同样的错误。

请参阅以下代码并提出建议。

File1:n_numbers.c

#define N 10

main()  
{

int count;
float sum, number;

count=0;
sum=0;

printf("Enter 10 numbers to calculate the Sum");

while(N<10)
{
scanf("%f", &number);

sum=sum+number;

count=count+1;
}

printf("sum=5.2%", sum);
}

File2:two.numbers.c

main()
{

int a,b,c;

printf("Enter Two numbers for a and b\n");
scanf("%d %d",&a, &b);

c=a+b;

printf("c=%d", c);

}

1 个答案:

答案 0 :(得分:3)

我怀疑你的问题是:

gcc file_a.c
a.out

作品

gcc file_b.c
a.out

作品

gcc file_a.c file_b.c

linker error

将是因为gcc正在尝试制作单个可执行文件,并且每个可执行文件必须具有完全一个main函数。

如果file_a和file_b 定义了一个名为public_main的函数,那么问题就变成了任何给定调用中的问题--C通过一个简单的规则来解决这个问题 - 你只能这样做每个可执行文件中的每个函数一个

N.B。其他语言有不同的规则,C ++可以有多个具有相同名称但不同原型的函数(重载),或者在不同的类中(命名空间),它实际上通过所谓的名称修改来完成。 Python使用命名空间和复杂的范围规则等。

从评论中复制!

  

史蒂夫,我在每个可执行文件中只有一个main(),但我仍然是   得到相同的错误 - user2714972

     

您有2个.c文件,并且您将它们链接到单个可执行文件中,   (.exe),这就是当你给它多个.c文件时gcc所做的事情   如果你想制作2个可执行文件,你需要两次调用gcc,   每次使用.c和使用-o differcent_exe_name来停止它们   叫a.out或a.exe - 史蒂夫巴恩斯

如果像某些人所建议的那样,您使用的是IDE,则需要根据IDE创建单独的项目或指定单独的目标。