c++ - 如何从同样具有 'main' 的 .cpp 源文件中链接函数?

标签 c++ gcc linker program-entry-point multiple-definition-error

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

这是我的 Makefile 中的规则:

$(CXX) $(CXXFLAGS) $(INCLUDES) $(SRCS) $(LIBS) -o $@

这是输出(更改了一些名称以防止分心):

$ make foo
g++ -g -Wall -m32 -Ilinux/include foo.cpp bar.cpp -o foo
/tmp/ccJvCgT3.o: In function `main':
/home/dspitzer/stuff/bar.cpp:758: multiple definition of `main'
/tmp/ccUBab2r.o:/home/dspitzer/stuff/foo.cpp:68: first defined here
collect2: ld returned 1 exit status
make: *** [foo] Error 1

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

更新: 我应该补充说“bar.cpp”是“其他人的”代码,并且有它自己的 main 原因。 (听起来我应该与其他人合作,让他将共享功能拆分到一个单独的文件中。)

最佳答案

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

#ifdef USE_MAIN1
int main(void)
{

}
#endif

然后确保在 gcc 命令行中添加类似这样的内容

-DUSE_MAIN1

或者只是重构您的代码!

关于c++ - 如何从同样具有 'main' 的 .cpp 源文件中链接函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3080156/

相关文章:

c++ - 为什么我不能将父类(super class)引用强制转换为也扩展另一个父类(super class)的子类?

c++ - 没有 constexpr 的模板非类型参数的类型转换

c - 通过gcc命令行进行C编译时出现问题

c++ - 静态和动态库链接

c++ - 我使用 vector 发生内存泄漏

c++ - 在 C++ 中解析时带有 protobuf 段错误的 zeromq

c++ - 在静态库中使用 boost::log 的链接器错误

C++: 错误: opencv_core: 即使需要的 .so 文件在/usr/lib/中,也没有这样的文件或目录

c++ - 在C++中获取行函数无法正常工作

c++ - Sizeof 在模板中失败,即使类型都已定义