GCC的使用

gcc后可以直接接文件的文件名。

如果不喜欢这个文件名,可以接-o   filename。

-c   命令行中指定的源代码文件编译和连接,创建一个目标文件。

-wall   打开通用的警告信息。

这里介绍GCC追常用的两种模式:编译模式和编译连接模式。下面以一个例子来说明各种模式的使用方法。为简单起见,假设我们全部的源代码都在一个文件test.c中,要想把这个源文件直接编译成可执行程序,可以使用以下命令:

$ GCC -o test

这里test.c是源文件,生成的可执行代码存放在一个名为test 的文件中(该文件是机器代码并且可执行)。-o 是生成可执行文件的输出选项。如果我们只想让源文件生成目标文件(给文件虽然也是机器代码但不可执行),可以使用标记-c ,详细命令如下所示:

$ GCC -c test.c

迄今为止,我们谈论的程序仅涉及到一个源文件;现实中,一个程序的源代码通常包含在多个源文件之中,这该怎么办?没关系,即使这样,用GCC处理起来也并不复杂,见下例:

$ GCC   first.c second.c third.c -o test

该命令将同时编译三个源文件,即first.c、second.c和 third.c,然后将它们连接成一个可执行程序,名为test。

许多情况下,头文件和源文件会单独存放在不同的目录中。例如,假设存放源文件的子目录名为./src,而包含文件则放在层次的其他目录下,如./inc。当我们在./src 目录下进行编译工作时,如何告诉GCC到哪里找头文件呢?方法如下所示:有编译所需的头文件或库文件时,需要通过-I到头文件或库文件所在位置进行查找链接

$ gcc test.c –I../inc -o test

上面的命令告诉GCC包含文件存放在./inc 目录下,在当前目录的上一级。如果在编译时需要的包含文件存放在多个目录下,可以使用多个-I 来指定各个目录:

$ gcc test.c –I../inc –I../../inc2 -o test

这里指出了另一个包含子目录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为动态库(共享库):程序运行时才去链接   在运行时候需要加载到程序中


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值