设为首页 加入收藏

TOP

Linux 下C语言编程库文件处理与Makefile编写
2015-11-10 13:46:19 来源: 作者: 【 】 浏览:26
Tags:Linux 语言编程 文件 处理 Makefile 编写

做开发快3年了,在Linux下编译安装软件算是家常便饭了。就拿gcc来说,都有不下10次了,可基本每次都会碰到些奇奇怪怪的问题。看来还是像vs、codeblocks这样的ide把人弄蠢了。便下定决心一定要好好学习下如何在Linux下纯手工gcc编译c项目。今天学了2点,一个是库文件处理,另一个是makefile编写。


首先需要清楚gcc编译做了些什么


源文件----预处理---->预处理文件(*.i)----编译---->汇编文件(*.s)----汇编编译---->目标文件(*.o)----链接---->可执行文件


基本与windows下的类似。通过给gcc加一些选项,可以控制编译工作进行到指定的阶段,下面试常用的一些gcc编译选项


学习过c和c++的都知道,c或c++程序存在各种各样的库文件,就是已经编译好的包含数据和执行代码的二进制文件。windows就是dll文件,linux下有.a和.so文件。如果需要使用这些库文件,在ide环境下勾个选项就把事给办了,在手工编译的情况下就麻烦了点。



上面的命令会在当前目录下生产 static_lib.a 静态库文件


编写 static_lib.h文件



编写main3.c文件,使用静态库中的方法



编译main3.c并链接静态库文件


执行


但却出现链接器ld找不到库的问题,把-l参数去掉就正常了


最后会生成可执行文件app3。静态库的特点是将库里的代码放到了执行文件里,如果修改了静态库的代码,要重新编译依赖它执行文件才能升级


动态库就是在有执行文件需要使用这个库时,动态加载到执行的库文件。



因为需要与位置无关,所以需要使用-fPIC选项,gcc的选项有上千个,需要查询某个选项可以man gcc然后查找查看


生成的share_lib.so文件就是动态库文件,在使用这个库的程序使用时被动态加载,并没有被写入到别的执行文件中,所以当库文件修改,不需要去重新编译其他使用这个库的程序


share_lib.h文件声明函数



编写main4.c文件,include "share_lib.h" 文件



编译main4.c并链接动态库


生成的app4就是可执行文件.


将前面静态库的3个源文件main3.c,static_lib.c,static_lib.h放到一个目录下。



编写Makefile文件。



其中冒号左边表示目标文件或者命令,命令也叫伪目标。


执行make



执行make clean可以清除编译产生的文件



当然,这恐怕是最简单的makefile了,Makefile还有很多学的,我也在学习中,以后有收获会继续写博客记录,争取以后看大神写的makefile不要在略懂略懂了


在CentOS 6.4中编译安装GCC 4.8.1 + GDB 7.6.1 + Eclipse 在CentOS 6.4中编译安装GCC 4.8.1 + GDB 7.6.1 + Eclipse


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux下利用glibc2库和crypt()函.. 下一篇Bash 下如何逐行读取一个文件

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: