当前位置: 技术问答>linux和unix
请问做动态库和静态库在使用上有什么区别?
来源: 互联网 发布时间:2014-12-29
本文导语: 比如一个函数add, 想把他做成库函数的方式给其他进程调用,有两种方式一种是静态的方式,一种是动态库的方式.请问懂的人能否讲解一下具体的区别,以及写这样的函数在两种方式下分别要注意什么? | 程...
比如一个函数add, 想把他做成库函数的方式给其他进程调用,有两种方式一种是静态的方式,一种是动态库的方式.请问懂的人能否讲解一下具体的区别,以及写这样的函数在两种方式下分别要注意什么?
|
程序的写法是相同的,支不过编译的的方式是不同的,呵呵
//add.c
int add2int(int i1, int i2)
{
return i1 + i2;
}
静态库
gcc -Wall -c add.c
ar crv libadd.a add.o
动态库
gcc -Wall -fPIC -c add.c
gcc -Wall -shared -Wl,-soname,add.so -o add.so add.o -lc
//add.c
int add2int(int i1, int i2)
{
return i1 + i2;
}
静态库
gcc -Wall -c add.c
ar crv libadd.a add.o
动态库
gcc -Wall -fPIC -c add.c
gcc -Wall -shared -Wl,-soname,add.so -o add.so add.o -lc
|
简单讲,静态库就是直接将需要的代码连接进可执行程序;动态库就是在需要调用其中的函数时,根据函数映射表找到该函数然后调入堆栈执行。
做成静态库可执行文件本身比较大,但不必附带动态库
做成动态库可执行文件本身比较小,但需要附带动态库
其它没有什么对于程序员而言很大的区别
有的Unix可能不支持动态库,所以只好用静态库
做成静态库可执行文件本身比较大,但不必附带动态库
做成动态库可执行文件本身比较小,但需要附带动态库
其它没有什么对于程序员而言很大的区别
有的Unix可能不支持动态库,所以只好用静态库