gcc后可以直接接文件的文件名。
如果不喜欢这个文件名,可以接-o filename。
-c 命令行中指定的源代码文件编译和连接,创建一个目标文件。
-wall 打开通用的警告信息。
这里介绍GCC追常用的两种模式:编译模式和编译连接模式。下面以一个例子来说明各种模式的使用方法。为简单起见,假设我们全部的源代码都在一个文件test.c中,要想把这个源文件直接编译成可执行程序,可以使用以下命令:
$ GCC -o test
这里test.c是源文件,生成的可执行代码存放在一个名为test 的文件中(该文件是机器代码并且可执行)。-o 是生成可执行文件的输出选项。如果我们只想让源文件生成目标文件(给文件虽然也是机器代码但不可执行),可以使用标记-c ,详细命令如下所示:
$ GCC -c test.c
迄今为止,我们谈论的程序仅涉及到一个源文件;现实中,一个程序的源代码通常包含在多个源文件之中,这该怎么办?没关系,即使这样,用GCC处理起来也并不复杂,见下例:
|
该命令将同时编译三个源文件,即first.c、second.c和 third.c,然后将它们连接成一个可执行程序,名为test。
许多情况下,头文件和源文件会单独存放在不同的目录中。例如,假设存放源文件的子目录名为./src,而包含文件则放在层次的其他目录下,如./inc。当我们在./src 目录下进行编译工作时,如何告诉GCC到哪里找头文件呢?方法如下所示:有编译所需的头文件或库文件时,需要通过-I到头文件或库文件所在位置进行查找链接
|
上面的命令告诉GCC包含文件存放在./inc 目录下,在当前目录的上一级。如果在编译时需要的包含文件存放在多个目录下,可以使用多个-I 来指定各个目录:
|
这里指出了另一个包含子目录inc2,较之前目录它还要在再上两级才能找到。
例子:hello.c#include <stdio.h>
int main()
{
printf("hello");
return 0;
}
在linux中用 gcc hello.c -o hello
./hello
即可得到结果: hello
linux下库文件分为两种:动态链接库(.so)和静态链接库(.a)。
gcc -WALL 警告 -0 优化代码等级(0-3) hello.c -o hello
gcc -WALL -0 -g增加条件 hello.c -o hello
(1)gcc -E hello.c -o hello.i 这是进行预编译! 预编译产生预编译文件
(2)gcc -s hello.i -o hello.s 这是一个汇编程序
(3)gcc -c hello.s -o hello.o 生成一个二进制文件
将库和目标文件进行链接 生成可执行文件
(4)gcc hello.s -o hello 生成可执行文件
./hello 运行程序
也可以一次性完成:
gcc hello.c -o hello
链接库:
.a为静态库 :编译链接时把库的代码加到可执行代码中。 gcc math.c -o hello lm 用ar 生成静态库 ar rcs libmath.a hello.o 首先需要生成.o文件再生成.a文件 rcs(replace and create and save)替换 创建 保存 静态文件以lib开始 -L..在当前目录底下搜索 -I. 如果在特定目录底下 通过-I.指定目录去查找
.so为动态库(共享库):程序运行时才去链接 在运行时候需要加载到程序中