【问题标题】:Is it possible to compile a c/c++ mixed source code?是否可以编译 c/c++ 混合源代码?
【发布时间】: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() 函数,而且绝对不能拥有不同语言的它们。同一个项目中也不能有多个同名文件。
  • @KenWhite 嗯?您当然可以拥有多个同名但不同目录的源文件。
  • 是的,这绝对是可能的。通过正确使用 extern "C",您可以从 C++ 代码调用 C 函数,反之亦然——甚至链接到同一个二进制文件。
  • 如果你小心点,只要你链接到 C++ 编译器而不是 C 编译器,它应该可以正常工作。这当然是传统的情况。即使使用 C 编译器,您可能也可以摆脱混合链接,但 C++ 有更多设置。您可能应该将 main() 函数作为 C++ 代码使用,即使它只是 int main(int argc, char **argv) { return c_main(argc, argv); } — 也就是说,它只是调用实现 main() 功能的(重命名的)C 函数。

标签: c++ c gcc makefile g++


【解决方案1】:

是的,你可以。你说你有一个 C 项目和另一个 C++ 项目。 但是您解决的方式(“分片库并链接它?”)是另一回事。

正如其他人所说,您可以:

1) 混合 C 和 C++(小心使用 extern "C"

2) 使用子项目创建项目(在 Xcode for Mac 中,将项目添加到现有项目中是一种标准做法

3) 确保只有一个 main()

4) 你想做一个外部库,不需要混合它们,但是如果你没有经验,公开方法、管理包含和链接选项以及传递参数可能会有点复杂。

Libs 和 DLL 与普通的“main()”程序非常不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多