Linux程序编程————学习笔记(3)

静态库和共享库

创建和维护增加的静态库,使用ar(代表archice,即建立归档文件)程序和使用gcc -c命令分别编译。尽可能把函数保存在不同源文件中,如果需要访问公共数据,可以放到一个源文件,并在文件中声明静态变量。
本例创建一个小型库函数,包含两个函数,分别是fred.c和bill.c,打印自动欢迎信息
(1)创建两个函数
//文件fred.c
#include <stdio.h>

void fred(int arg)
{
    printf("fred:we passed %d\n",arg);
}

//文件bill.c
#include <stdio.h>

void fred(int *arg)
{
    printf("fred:we passed %s\n",arg);
}

(2)分别编译目标文件。-c选项作用是让编译器只编译文件都是不链接文件。
$ gcc -c bill.c fred.c
$ls *.o
(3)为库文件创建一个头文件,这个头文件声明你的库文件中的函数。文件lib.h
void bill(char *);
void fred(int);
(4)编写main主函数来调用其他函数的程序,文件program.c
#include <stdlib.h>
#incude "lib.h"

int main()
{
    bill("Hello World");
    exit(0);
}
(5)编译并测试程序,暂时为编译器显式指定目标文件,然后要求编译器编译你的文件并将于先前的目标模块bill.o
$gcc -c program.c
$gcc -o program program .o bill.o
$./program
bill:we passed Hello World
$
(6)创建库文件使用ar程序创建归档文件并添加目标文件
$ar crv libfoo.a bill.o fred.o
a - bill.o
a - fred.o
(7)库文件创建好了,目标文件也添加,然后生成内容表来成功使用函数库。
$ ranlib libfoo.a
函数库可以使用。
$ gcc -o program program.o libfoo.a
$ ./program
bill:we passed Hello World
$
也可以使用-l选项访问函数库,因为未保存在标准位置,所以必须使用-L来告诉编译器。
$ gcc -o program program.o -L. -lfoo

共享库:
静态库缺点就是同时运行许多应用程序都使用来自一个函数,所以内存会有同一函数的多份副本。而且程序文件自身也有多份同意的副本。所以会消耗大量内存和磁盘空间。
共享库的链接方式是:程序本身不包括函数代码,而是引用运行时可以访问的共享代码。当编译好的程序被装载到内存执行时,函数应用被解析并产生对共享库的调用。这样的话,系统保留共享库的一份副本供许多应用程序同时执行。例如,文件/lib/libm.so就是对实际库文件修订的版本的符号链接。
在Linux中,负责装载共享库并解析客户程序函数引用的程序(动态装载器)是ld.so,也可能是ld-linux.so.2、ld-lsb.so.2或ld-lsb.so.3。用于搜索共享库的额外位置可以在文件/etc/ld.so.conf中配置,如果修改了该文件,需要执行命令ldconfig来处理它。
可以通过运行工具来查看程序需要的共享库
$ ldd program
手册页和info
查看GNU C语言编译器(gcc)的文档
$ man gcc
$ info gcc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值