Linux 动态库及静态库的创建使用

加粗样式

Linux下静态库和动态库的创建及使用

	    静态库文件后缀为 **.a**,动态库文件后缀为**.so**本次以简单的两个函数的集合来描述这些库的创建以及使用:
	建立这样几个目录:
	**Function  HeadFile  Lib  Media  Outfile  SourceCode**
	作用从左至右分别是:
		函数主体存放,头文件存放,库文件存放,中间文件存放,输出文件存放,主函数文件存放

       在**Function**中创建这样两个文件:**Add.c  Sub.c**,分别输出两个数的和和差。
       在**SourceCode**创建一个 **test.c**,里面添加函数声明,以及实例,不需要给出头文件,这些会在库的创建中被代替对应的作用

静态库

		一.  将所有的函数编译为中间文件:
		gcc -c ./Function/Add.c  -o ./Media/Add.o
        gcc -c ./Function/Sub.c  -o ./Media/Sub.o
        二.  使用 ar 命令打包所有的中间文件
		ar -cr ./Lib/libtest.a Add.o Sub.o
			其中 libtest.a 是我自己命名的静态库文件名
			要删除库文件中某个函数,使用 **-d 你要删除的中间文件**
			要添加的话,使用 -rs 参数用法和删除的参数相同
			例如:ar -d Add.o
				 ar -rs Add.o
		三.  链接
		gcc -c ./SourceCode/atest.c -o ./Media/atest.o
			这是将主函数文件编译为中间文件,有利于后面的对接
		gcc ./Media/atest.o -L./Lib -ltest -o ./Outfile/atest.out
			其中 -L 指定库文件所在根目录,-l 指定库文件的名称,我的库文件原名是 **libtest.a**,但在该参数后面变成了 **test** ,去除了前面的 **lib** 和后面的 **.a**,这是另一个需要注意的地方。
		四.  运行
			./Outfile/atest.out 即可得出结果

动态库

	一.  创建可以重定位函数地址的中间文件
		gcc -c -fpic ./Function/Add.c -o ./Media/Add.o
        gcc -c -fpic ./Function/Sub.c -o ./Media/Sub.o
        	这里的参数 -fpic 就是给予中间文件函数重定位的能力
    二.  将这些中间文件连接成一个动态库
    	gcc -shared ./Media/Add.o ./Media/Sub.o  -o ./Lib/libsotest.so
    		参数 -shared 就起到这个作用,后面的**libsotest.so**是我命名的动态库文件名
    三.  使用动态链接库
    	gcc ./SourceCode/atest.c -s ./Lib/libsotest.so -o ./Outfile/sotest.out
    		动态库使用时不需要把主函数文件编译为中间文件,参数 -s  是使用该库文件;
    四. 执行
    	./Outfile/sotest.out 
    	      但是如果这样直接执行,会发生错误,原因是加载共享库(动态库)的时候,找不到它,
    	   因为系统默认从根目录下的 **/lib** 去寻找,然后再用用户的 **LD_LIBRARY_PATH**变量值下去寻找,这时,我们应当更改该变量的值:
        export  LD_LIBRARY_PATH=./Lib/ 
    	   完成之后你运行 echo 指令可以看到:
    	 **echo $LD_LIBRARY_PATH
    	 ./Lib/**
    	   此时你就可以直接运行 ./Outfile/sotest.out  结果会正常出现
    	   但是这是一个临时的办法,当用户重新登录的时候,又会出现问题,要解决他,在用户的加目录中 输入 ll -a 命令,可以看到有一个
    	  -rw-r--r--. 1 wad  wad    343 1月  20 02:44 **.bashrc** 文件,编辑它,在里面加上这样的一句话:export  LD_LIBRARY_PATH=/home/wad/Lib 就可以永久生效
    	  其中 wad 是用户的家目录名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值