【问题标题】:"Linking Error: Duplicate public_main in module" while building [closed]构建时“链接错误:模块中的 public_main 重复”[关闭]
【发布时间】:2013-08-27 21:49:35
【问题描述】:

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

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

请查看以下代码并提出建议。

文件 1: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);
}

文件2: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);

}

【问题讨论】:

  • “请告诉我解决方案。” - 不。请向我们展示代码和编译器调用。
  • 你一共有多少个名为public_main()的函数?
  • 欢迎来到 Stack Overflow。请尽快阅读About 页面。 “工作区”听起来像是一个与 IDE 相关的术语。您在哪个平台上使用哪个 IDE? (C 编译器本身没有“工作区”;他们不需要它们。)此外,在 C 中没有与名称 public_main() 相关联的标准含义;只有函数main() 和标准C 库中列出的函数具有特殊地位。编写public_main() 函数一定是有原因的,但它超出了标准。您需要指定您在程序中使用哪些文件,哪些文件包含public_main()

标签: c linker


【解决方案1】:

我怀疑你的问题是:

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 通过一个简单的规则解决了这个问题 - 你只能有 每个可执行文件中每个函数的一个

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

从 cmets 复制!

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

您有 2 个 .c 文件并将它们链接到一个可执行文件中, (.exe),这就是 gcc 在您提供多个 .c 文件时所做的事情 如果你想制作 2 个可执行文件,你需要调用 gcc 两次, 每个 .c 和 -o differentcent_exe_name 一次以停止两者 称为 a.out 或 a.exe – Steve Barnes

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

【讨论】:

  • 这是关于public_main(),而不是main()。不过,答案是适用的,因此 +1。
  • 嗨史蒂夫和乔纳森,
  • 谁能帮帮我
  • 是的!确保您在链接在一起的所有文件中都有一个定义public_main
  • 看看你上面的改变我发现你在做完全我在开始时说的你只能有一个而且必须有一个 @987654329 @在每个可执行文件中.
猜你喜欢
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 2013-04-01
  • 1970-01-01
  • 2010-11-24
  • 2018-06-22
相关资源
最近更新 更多