是否可以编译 c/c++ 混合源代码?
Posted
技术标签:
【中文标题】是否可以编译 c/c++ 混合源代码?【英文标题】:Is it possible to compile a c/c++ mixed source code? 【发布时间】:2017-07-28 01:40:06 【问题描述】:我们有一个c项目,想把一个c++项目合并到这个c项目中,编译成一个二进制文件,可以吗?
类似
cproject/src/
cproject/src/a.h
cproject/src/a.c
cproject/src/b.h
cproject/src/b.c
cproject/src/main.c
添加 cpp 项目
cproject/cppproject/src/c.h
cproject/cppproject/src/c.cpp
cproject/cppproject/src/m.h
cproject/cppproject/src/m.cpp
也许将 cpp 编译为分片库并链接它?
【问题讨论】:
不,即使使用一种语言,你也不能拥有两个main()
函数,而且绝对不能拥有不同语言的它们。同一个项目中也不能有多个同名文件。
Makefile with mixed c and C++ code的可能重复
@KenWhite 嗯?您当然可以拥有多个同名但不同目录的源文件。
是的,这绝对是可能的。通过正确使用 extern "C"
,您可以从 C++ 代码调用 C 函数,反之亦然——甚至链接到同一个二进制文件。
如果你小心点,只要你链接到 C++ 编译器而不是 C 编译器,它应该可以正常工作。这当然是传统的情况。即使使用 C 编译器,您可能也可以摆脱混合链接,但 C++ 有更多设置。您可能应该将 main()
函数作为 C++ 代码使用,即使它只是 int main(int argc, char **argv) return c_main(argc, argv);
— 也就是说,它只是调用实现 main()
功能的(重命名的)C 函数。
【参考方案1】:
是的,你可以。你说你有一个 C 项目和另一个 C++ 项目。 但是您解决的方式(“分片库并链接它?”)是另一回事。
正如其他人所说,您可以:
1) 混合 C 和 C++(小心使用 extern "C" )
2) 使用子项目创建项目(在 Xcode for Mac 中,将项目添加到现有项目中是一种标准做法
3) 确保只有一个 main()
4) 你想做一个外部库,不需要混合它们,但是如果你没有经验,公开方法、管理包含和链接选项以及传递参数可能会有点复杂。
Libs 和 DLL 与普通的“main()”程序非常不同。
【讨论】:
以上是关于是否可以编译 c/c++ 混合源代码?的主要内容,如果未能解决你的问题,请参考以下文章
编译工具VS Code混合调试 C/C++ 和 Node.js