是否可以编译 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++ 混合源代码?的主要内容,如果未能解决你的问题,请参考以下文章

在混合 C/Fortran 代码中捕获浮点异常

编译工具VS Code混合调试 C/C++ 和 Node.js

是否可以在 Android Studio 中调试 C/C++?

iOS - 静态类库 打包 C,C++文件及和OC混编

混合编程JNI之第一篇 Hello world

混合编程JNI之第一篇,Hello world