linux下程序开发的基本概念

      首先,我们认识几个目录。头文件,位于/usr/include目录。头文件包含有常量定义、系统调用和库函数调用的声明。这是系统默认的头文件存放路径,在编译程序时,编译器会自动查找该目录。gcc编译器在编译程序时也可用-I参数指定另外的头文件路径。如:gcc -l /usr/local/myinclude test.h 

库文件,库是一组已编译的函数集合,可方便我们重用代码。默认存放在/lib和/usr/lib目录。库文件可分为静态和共享两类。

 

.a,静态库文件。使用静态库将会把所有的库代码引入程序,占用更多的磁盘空间和内存空间,所以一般建议使用共享库。

.so,共享库文件。使用共享库的程序不包含库代码,只在程序运行才调用共享库中的代码。

在编译时可用包含路径的库文件名或用-l参数指定使用的库文件,/usr/lib/libm.a等价于-lm。如:gcc -o hello hello.c /usr/lib/libm.a 

或用-l参数写成 gcc -o hello hello.c -lm ,如果我们要使用的库文件不在默认位置,在编译程序时可用-L参数指定库文件的路径。

下面通过编写一个静态库实现函数功能的例子来具体说明。

 

分别创建两个函数,函数a的内容如下:

 

函数b的内容如下:

 

接着,分别生成目标文件a.o和b.o

$ gcc -c a.c b.c

$ls *.o

a.o  b.o  

最后,用ar归档命令把生成的对象文件打包成一个静态库libhello.a。

$ ar crv libhello.a a.o b.o

 

a - a.o

a - b.o

为我们的静态库定义一个头文件libhello.h,包含这两个函数的定义。
 
最后,创建测试程序hello.c
 
利用静态链接库编译程序:
$gcc -c hello.c
$ gcc -o hello hello.o libhello.a
$ ./hello
function a,hello world heqiang
function b,hello world 3
从上面这个例子我们看到了程序从源文件(.c)文件经过预处理,编译,汇编生成了.o文件,然后通过链接静态库文件生成可执行程序。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值