您的位置:首页 > 运维架构 > Linux

【linux gcc】gcc编译器相关(7月6日学习总结)_学习笔记_003

2016-07-07 11:50 543 查看
一、gcc命令使用格式:

gcc [选项] [文件] [选项] [文件]

 

        

-E
对源文件进行预处理
-c
对源文件进行编译或汇编
-S
对源文件进行编译
-o file 
输出目标文件file
-w
屏蔽所有警告信息
-Wall
显示所有类型警告信息
-O0
不进行优化(默认)
-O1
 
-O2
 
-O3
 
-L
指定搜索路径
 

 

二、<> 与 ” ” 区别



1.< >一般用于标准的头文件,表示在系统配置的头文件目录中搜索,找不到则报错

2.” ”一般用于自己编写的程序,表示先在当前目录搜索,搜索不到则在系统配置的目录中寻找

 

虽然” ” 可以用于在系统配置目录搜索,但是因为需要先在当前目录搜索,会降低运行效率,因此“ ” 一般用于自己编写的程序,< > 用于标准的头文件。

 

 

三、如何写一个头文件,方法有两个:

方法1

先建立一个后缀为.c的文件,文件名为add.c,用于书写函数,内容如下



然后建立一个后缀为.h的文件,文件名为add.h,用于声明函数,内容如下

 


 

再建立一个c程序main.c引用该头文件,内容如下

 


最后同时对main.c  add.c进行编译

 


运行结果如下

 



方法2

建立一个后缀为.h的文件,add.h,内容如下

 


建立main.c

 


此时只需编译main.c,即可得到结果



 

四、库文件

库文件的特点:看不到库文件里定义的函数和变量,但是可以调用其中的函数

 

不同位置存储的库文件的作用:

1.根目录下库文件/bin:系统运行所依赖的库文件

2./usr/bin:程序软件运行所依赖的库文件

 

静态库与动态库的区别:

1.使用时机

静态库:后缀名为.a,在编译时将库文件中的代码搬迁到执行文件中。

动态库:后缀名为.so,在执行时将需要的库文件中的代码搬迁到执行文件中。

 

2.其他区别:

静态库
动态库
可执行文件体积大
 可执行文件体积小
可执行文件运行效率高
 运行效率低
不易升级,使用需重新编译 
 易于升级
编译速度慢
 编译速度快
代码布局更方便
 布局较难
 

总结:需要频繁升级,或者有多个源文件需要调用函数库,使用动态库;

          需要较高的执行效率,只有少数源文件需要调用函数库,使用动态库。

 

制作库文件(以建立add库函数为例):

1.制作静态库:(1)gcc  -c  add.c            (生成add.c的汇编文件)

      (2)ar  rcs  libadd.a  add.c   (把add.o封装到库里)

                      (3)gcc  main.c -ladd.a  -L.  (使main.c链接到libadd.a库(使用库))

 

PS:1.头文件不进行声明依然可以执行程序,会出现如下警告

          2.-L. 为库文件当前所在目录,若在其他目录需要指定其路径





 

2.制作动态库:(1)gcc  -shared -fIPC  add.c  -o libadd.so (制作add.c动态库)

                      (2)gcc  main.c  ./libadd.so                (使用动态库)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息