C++ 如何从同样具有';主&x27;?
我想使用.cpp源文件中的一些函数,该文件在.cpp源文件中有一个主函数。(我正在使用make和gcc进行构建。) 以下是我的Makefile中的规则: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”是“其他人的”代码,并且有它自己的主要原因。(听起来我应该与其他人合作,让他将共享函数拆分成一个单独的文件。)
$(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