【问题标题】:multiple definition of main() function with gcc compilation in c在 c 中使用 gcc 编译的 main() 函数的多重定义
【发布时间】:2021-12-04 21:59:31
【问题描述】:

我正在寻找一种高效(快速且安全)的方法来将多个脚本(及其关联的主函数 ())相互通信。有点像G-WAN 项目的原理,它使用启动器 (./gwan) 来读取/加载/编译不同的 .c 文件,每个文件都包含(或不包含)main() 函数。

理想情况下,我的启动器应该能够执行其他脚本的 main () 函数,同时通过它们的 argv 变量共享信息。

但如你所知,gcc -Wall script1.c script2.c script3.c -o test 给我返回一个函数 main() 的多重定义的错误,而gcc -Wl,--allow-multiple-definition -Wall script1.c script2.c script3.c -o test 只解释第一个 script1.c main() 函数。

也许解决方案是拥有一个通过共享变量编译其他脚本(script2.c 和 script3.c)的第一个脚本 (script1.c)?

感谢您的帮助,抱歉我的英语有限。

script1.c:

int main(int argc, char *argv[]){
  ...
  int i = main(argc, argv); // main for script2.c
  if(i == 0)
    main(argc, argv); // main for script3.c
  ...
  return(0);
}

script2.c:

int main(int argc, char *argv[]){
  ...
  return(0);
}

script3.c:

int main(int argc, char *argv[]){
  ...
  return(0);
}

【问题讨论】:

  • 您需要分别编译每个程序,并使用systemforkexec 启动一个新进程。
  • 顺便说一句,C 中没有“脚本”。
  • 好主意 dbush,但我对这个解决方案的问题是(例如)在 script1.c 中创建一个变量,该变量将在 script2.c 中传递和修改,然后使用(变量修改)在script1.c ...你有解决方案吗? (共享内存?)

标签: c gcc makefile g-wan


【解决方案1】:

你不能在 c 中拥有多个 main 函数,这是不允许的,你可以做的就是在你的第一个 .c 文件中拥有你的 main 函数,而在你的其他 .c 文件中拥有你想要的任何东西。

然后你可以写:

#include "script2.c"
#include "script3.c"

在您的 script1.c 文件之上。

如果您想计算文件中的值并将其“发送”到主文件,您可以通过在其他文件中定义的函数来完成,因为您包含它!

请注意,C 中没有脚本!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2016-07-13
    • 2015-08-25
    • 2016-07-30
    • 2018-04-23
    • 2022-11-29
    • 2011-12-18
    相关资源
    最近更新 更多