【问题标题】:Compiling C files along with C++ file in g++在 g++ 中编译 C 文件和 C++ 文件
【发布时间】:2021-08-19 08:51:03
【问题描述】:

我有一个我创建的自定义 C 头文件。我的目录中有几个文件如下。

lib1/
     -lib1.h
     -lib1.c
lib2/
     -lib2.h
     -lib2.c
-lib_main.c
-lib_main.h
-main.c
-main.cpp
-Makefile

现在,为了使用名为 main.c 的测试文件测试头文件,我将在终端中给出以下命令,

gcc lib_main.c lib1/lib1.c lib2/lib2.c main.c -o ./main

现在,如何使用 main.cpp 而不是 main.c 测试相同的头文件,我该如何更改它?

【问题讨论】:

  • 大概你只是在那个命令中用main.cpp代替main.c,但是你真的不应该像那样混合C和C++。分别编译每个文件,然后将它们链接在一起。找到一个好的 Makefile 模板,或者如果您愿意,可以找到 CMake,作为一种可靠地执行此操作的方法。
  • 你能解释一下如何分别编译并链接它们吗?
  • 选择你最喜欢的Makefile template 并从那里开始构建。这个想法是您以正确的语言模式(C 或 C++)编译每个文件,然后将它们组合成最终的可执行文件。

标签: c++ c gcc g++ header-files


【解决方案1】:

您应该(并且很可能必须)将 c 和 c++ 源代码分别编译成一个目标文件,然后链接在一起。

举个例子

gcc -c -o lib1.o lib1/lib1.c
gcc -c -o lib2.o lib2/lib1.c
gcc -c -o lib_main.o lib_main.c
g++ -c -o main.o main.cpp
g++ -o main lib1.o lib2.o lib_main.o main.o

前四个命令创建一系列目标文件,扩展名为 .o。最后一个命令将目标文件链接在一起成为可执行文件。 显然您需要为每个源添加相关的编译器选项。

需要注意的两个要点:

  • 链接中文件的顺序很重要。请参阅讨论 herehere

  • 要将 c 和 c++ 代码相互混合,例如如果 c++ 代码调用 c 函数,则需要遵循特定的guidelines

【讨论】:

  • 我得到了这个问题的答案。必须使用 extern 才能正确编译它。解决了。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多