Linux下类库主要有静态库和动态库两种库。其中,静态库在程序连接的时候会自动的连接到程序里,所以一但编译完成,静态库也就不需要了。静态库通常以.a结尾。而动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。通常以.so结尾。因此,静态库相对于共享库来说有更高的效率但是也要消耗更多的空间。值得注意的是,如果既有静态库又有动态库,在编译时默认的使用动态库。
1、制作静、动态库:
b.c
#include
int test()
{
printf("This is first to use static lib!\n");
}
静态库:
gcc -c b.c产生b.o
ar -r libb.a b.o产生libb.a静态库
动态库:
gcc -c -fpic b.c
gcc -shared b.o -o libb.so
2、调用静、动态库:
c.c
#include
int main(int argc,char** argv)
{
printf("Call static/dynamic lib:");
test();
return 0;
}
静态库:
gcc -o c.static c.c libb.a(c.static为可执行文件名)
动态库:
gcc -o a c.c ./libb.so
run it:
./a
Call static/dynamic lib:This is first to use static lib!
djstava@djstava:~/execise/lsp$ ldd a
linux-gate.so.1 => (0xb7ff6000)
./libb.so (0xb7ff1000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e7c000)
/lib/ld-linux.so.2 (0xb7ff7000)
阅读(1600) | 评论(0) | 转发(0) |