1

最近我不得不在我正在处理的 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 文件编译到我的可执行文件中?

编辑:我的猜测是 gcc 和 g++ 都可以编译 .o 文件,如果是这种情况,总是将东西编译为 .o 文件是一个好习惯吗?

4

2 回答 2

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
于 2012-09-13T18:26:33.177 回答
0

引用自维基百科:

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

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

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

同样正如 Mysticial 所指出的,您混合了 C 和 C++

于 2012-09-13T18:18:42.570 回答