在 g++ 中编译 C 文件和 C++ 文件

Compiling C files along with C++ file in g++

我有一个我创建的自定义 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 测试相同的头文件,我该如何更改它?

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

举个例子

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。最后一个命令link把目标文件一起变成了可执行文件。 显然你需要为每个源添加相关的编译器选项。

注意两点:

  • 文件在 linking 中的顺序很重要。请参阅讨论 here and here

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