必须将文件编译为不同扩展类型的原因

时间:2012-09-13 18:12:51

标签: c++ gcc g++ mingw gnu

最近我不得不在我正在使用的sqlite程序的makefile中使用此命令:

gcc -g -c sqlite3.c -o sqlite3.o
g++ -g -c main.cpp -o main.o
g++ sqlite3.o main.o -o sqliteex

我必须直接将sqlite3.c文件编译到我的程序中才能使用sqlite3.h接口(使用#include SQL / sqlite3.h包含在main.cpp文件中)。但为什么我需要使用gcc来执行此操作并创建sqlite3.o,然后将这两个文件作为.o文件编译到我的可执行文件中?

编辑:我的猜测是.o文件可以通过gcc和g ++编译,如果是这样的话,那么总是将事物编译为.o文件是一个好习惯吗?

2 个答案:

答案 0 :(得分:3)

  

但为什么我需要使用gcc来执行此操作并创建sqlite3.o,然后将这两个文件作为.o文件编译到我的可执行文件中?

你没有需要来做到这一点。 这样做的原因是指定sqlite.c是 C 代码而不是 C ++ 代码。你可以这样做:

g++ main.cpp -x c sqlite3.c -o sqliteex

此外,有可能(但不是完全可以)sqlite代码可以编译为C ++,如下所示:

g++ main.cpp sqlite3.c -o sqliteex

答案 1 :(得分:0)

来自维基百科的引用:

单一编译单元是一种用于C / C ++语言的计算机编程技术,它可以减少编译时间并帮助编译器执行程序优化,即使编译器本身缺乏对整个程序优化或预编译头文件的支持。

http://en.wikipedia.org/wiki/Single_Compilation_Unit

开发主要是编辑 - >编译直到成功周期。当您单独编译文件时,您只能重新编译已修改的文件,这使重建速度更快。最后一行不是编译,而是将编译的目标文件链接到目标可执行文件。

同样,Mysticial指出,你有C和C ++的混合