C++ 如何从同样具有';主&x27;?

C++ 如何从同样具有';主&x27;?,c++,gcc,linker,main,multiple-definition-error,C++,Gcc,Linker,Main,Multiple Definition Error,我想使用.cpp源文件中的一些函数,该文件在.cpp源文件中有一个主函数。(我正在使用make和gcc进行构建。) 以下是我的Makefile中的规则: $(CXX) $(CXXFLAGS) $(INCLUDES) $(SRCS) $(LIBS) -o $@ 以下是输出(更改了一些名称以防止分心): 如何向gcc表明我要使用foo.cpp中的main 更新:我应该添加“bar.cpp”是“其他人的”代码,并且有它自己的主要原因。(听起来我应该与其他人合作,让他将共享函数拆分成一个单独的文件。)

我想使用.cpp源文件中的一些函数,该文件在.cpp源文件中有一个主函数。(我正在使用make和gcc进行构建。)

以下是我的Makefile中的规则:

$(CXX) $(CXXFLAGS) $(INCLUDES) $(SRCS) $(LIBS) -o $@
以下是输出(更改了一些名称以防止分心):

如何向gcc表明我要使用foo.cpp中的main


更新:我应该添加“bar.cpp”是“其他人的”代码,并且有它自己的主要原因。(听起来我应该与其他人合作,让他将共享函数拆分成一个单独的文件。)

问题不在于使用哪个
main
作为您的“main”,因为您甚至不会走那么远

你不能重新定义函数,它打破了一个定义的规则。同样,你也不能这样做:

void foo(void)
{
    // number one
}

void foo(void)
{
    // number two
}

// two foo's? ill-formed.

您不能尝试编译多个
main
。您需要删除其他函数。

您可以将每个main()函数包装在
#ifdef
块中,然后使用命令行定义将使用相关main的符号

#ifdef USE_MAIN1
int main(void)
{

}
#endif
然后确保gcc命令行中添加了类似的内容

-DUSE_MAIN1

或者只是重组你的代码

最简单的方法是删除第二个main(…){…},并保留其余的函数。这很容易解决问题

听起来我应该和其他人合作,让他将共享函数拆分成一个单独的文件


没错,那是最好的选择。如果您两人都需要单独的
main
s进行测试、使用不同的产品或其他原因,请将常用代码和
main
s分解成单独的文件,并根据某些构建设置仅使用所需的文件。

如果他可以修改代码以放入编译器宏,然后他可以修改代码,将他想要的函数分割成一个单独的文件,并让链接器完成它的工作。这样他就不会用一个不需要的
main
把自己的代码库弄得乱七八糟,也不会用一个毫无意义的
#ifndef
污染另一个人的代码。答案是在OP表示无法修改之前写的。我同意这并不理想,但它回答了如何编译和链接定义相同函数的两个文件的问题。我将接受这个答案,因为它允许我在与其他工程师一起正确解决问题之前,现在“快速而肮脏”地解决问题。
-DUSE_MAIN1