Chinaunix首页 | 论坛 | 博客
  • 博客访问: 724307
  • 博文数量: 104
  • 博客积分: 4320
  • 博客等级: 上校
  • 技术积分: 1948
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-30 14:42
文章分类

全部博文(104)

文章存档

2012年(4)

2011年(65)

2010年(35)

分类: LINUX

2011-04-06 13:30:35

Linux下静态库动态库(共享)的制作与使用

Linux操作系支持的函数态库动态库动态库又称共享linux有几个重要的目存放相的函数,如/lib /usr/lib

函数

这类库的名字一般是libxxx.a;利用静函数库编译成的文件比大,因整个函数的所有数据都会被整合

中,他的点就而易了,即编译后的行程序不需要外部的函数支持,因所有使用的函数都已编译进行文件了。当然也会成他的缺点,因如果静函数了,那你的程序必重新编译,而且体大。

动态函数

这类库的名字一般是libxxx.so动态库又称共享;于静函数动态函数编译候并没有被编译进

中,你的程序行到相函数函数里的相函数,因此动态函数生的可行文件比小。由于函数没有被整合你的程序,而是程序运行时动态的申用,所以程序的运行境中必提供相动态函数的改并不影响你的程序,所以动态函数的升方便。而且如果多个用程序都要使用同一函数动态库就非常适合,可以减小用程序的体

下面来介linux函数建和使用:

例程add.h add.c sub.h sub.c main.c:

add.h

#ifndef ADD_H

#define ADD_H

int add(int x,int y);

#endif

add.c

#include

#include "add.h"

int add(int x,int y)

{

return (x+y);

}

--------------------------------------------------------------------

sub.h

#ifndef SUB_H

#define SUB_H

int sub(int x,int y);

#endif

sub.c

#include

#include "sub.h"

int sub(int x,int y)

{

return (x-y);

}

-----------------------------------------------------------------------

main.c

#include

#include "sub.h"

#include "add.h"

int main()

{

int a,b;

a = add(1,2);

b = sub(10,5)

printf(“a=%d,b=%d\n”,a,b);

return 0;

}

----------------------------------------------------------------------


不管是静函数库还动态函数,都是由*.o

文件生成。

所以先 gcc -c add.c

gcc -c sub.c

生成add.o sub.o

函数ar命令


本例:ar -cr libaddsub.a add.o sub.o


-c create的意思

-r replace的意思,表示当插入的模名已中存在,同名的模。如果若干模中有一个模中不存在,ar示一个错误消息,并不替其他同名模。默的情况下,新的成增加在,可以使用其他任选项来改增加的位置。


到此静函数库创建完

操作静态库的几个实例:

情况1: 如果从别处得到一个静态库libunknown.a,想知道其中包含哪些模块。

命令:ar -t libunknown.a

本例:ar -t libaddsub.a

            add.o
            sub.o

情况2:如果想把sub.o移动到add.o前面

命令: ar  -mb add.o libaddsub.a sub.o

           ar -t libaddsub.a
          sub.o
          add.o

情况3:如果还有一个multiply.o,想把它加在add.o和sub.o中间

命令:ar -qa add.o libaddsub.a multiply.o

          ar -t libaddsub.a
          add.o
          multiply.o
          sub.o

使用方法:通gcc -o main main.c -L. -laddsub编译main.c就会把静函数整合main

其中

-L指定静函数的位置供找,注意L后面'.',表示静函数在本目找。

-l指定了静函数名,由于静函数的命名方式是lib***.a,其中的lib.a忽略。

根据静函数的特性,此处删libaddsub.amain依然可以运行,因态库的内容已整合去了。

动态函数建和使用

gcc -shared -fpic -o libaddsub.so add.c sub.c

-fpic生位置无

-shared:生成共享

用上述命令生成libaddsub.so 动态函数

gcc -o out main.c -L. -laddsub

时还不能立即./out,因动态函数使用,会/usr/lib /lib下的动态函数,而此生成的不在里

候有好几方法可以他成功运行:

最直接最简单的方法就是把libaddsub.so拉到/usr/lib /lib中去。

有一方法,libaddsub.so/home/linux/addsub

export LD_LIBRARY_PATH=/home/linux/addsub$LD_LIBRARY_PATH

另外可以在/etc/ld.so.conf文件里加入我生成的的目,然后/sbin/ldconfig


/etc/ld.so.conf是非常重要的一个目,里面存放的是接器和加器搜索共享库时检查的目,默是从/usr/lib /lib取的,所以想要利运行,我也可以把我们库的目加入到个文件中并/sbin/ldconfig



阅读(5327) | 评论(0) | 转发(4) |
给主人留下些什么吧!~~