静态库文件的后缀为.a,在Linux下一般命名为libxxx.a。在链接步骤中,连接器将从静态库文件中取得所需的代码,复制到生成的可执行文件中。因此,整个库中的所有函数都被编译进了目标代码中。动态库文件的后缀为.so,在Linux下一般命名为libxxx.so。相对于静态库,动态库在编译的时候并没有被编译进目标代码中,而是程序执行到相关函数时才调用库中对应的函数。可以看到,静态库的优点是编译后的执行程序不需要外部的函数库支持,缺点是如果静态函数库改变了,那么你的程序必须重新编译;而动态库在多个应用程序都要使用同一函数库的时候就非常适合,但前提是程序的运行环境中必须提供相应的库。
#include<stdio.h>voidtest();#include"test.h"voidtest(){printf("this is in test......
");}#include"test.h"int main(){test();return0;}~/zhouzhaoxiong/zzx/mytest/a/single> ll-rw-------1 zhou dba 53Nov 416:04 main.c-rw-------1 zhou dba 80Nov 416:04test.c-rw-------1 zhou dba 36Nov 416:04test.h~/zhouzhaoxiong/zzx/mytest/a/single> gcc-c test.c~/zhouzhaoxiong/zzx/mytest/a/single> ll-rw-------1 zhou dba 53Nov 416:04 main.c-rw-------1 zhou dba 80Nov 416:04test.c-rw-------1 zhou dba 36Nov 416:04test.h-rw-rw-rw-1 zhou dba 1624Nov 416:06test.o~/zhouzhaoxiong/zzx/mytest/a/single> ar -r libtest.a test.oar: creating libtest.a~/zhouzhaoxiong/zzx/mytest/a/single> ll-rw-------1 zhou dba 53Nov 416:04 main.c-rw-rw-rw-1 zhou dba 1766Nov 416:06 libtest.a-rw-------1 zhou dba 80Nov 416:04test.c-rw-------1 zhou dba 36Nov 416:04test.h-rw-rw-rw-1 zhou dba 1624Nov 416:06test.o~/zhouzhaoxiong/zzx/mytest/a/single> gcc-o test main.c libtest.a~/zhouzhaoxiong/zzx/mytest/a/single> ll-rw-------1 zhou dba 52Nov 416:09 main.c-rwxrwxrwx 1 zhou dba 11876Nov 416:09test-rw-rw-rw-1 zhou dba 1766Nov 416:06 libtest.a-rw-------1 zhou dba 80Nov 416:04test.c-rw-------1 zhou dba 36Nov 416:04test.h-rw-rw-rw-1 zhou dba 1624Nov 416:06test.o~/zhouzhaoxiong/zzx/mytest/a/single> ./testthisisintest......#include<stdio.h>void test_1();void test_2();void test_3();#include"test.h"void test_1(){printf("this is in test_1......
");}#include"test.h"void test_2(){printf("this is in test_2......
");}#include"test.h"void test_3(){printf("this is in test_3......
");}#include"test.h"int main(){test_1();test_2();test_3();return0;}~/zhouzhaoxiong/zzx/mytest/a/more> ll-rw-------1 zxin10 dba 96Nov 416:11 main.c-rw-------1 zxin10 dba 70Nov 416:04test.h-rw-------1 zxin10 dba 84Nov 416:04 test_1.c-rw-------1 zxin10 dba 84Nov 416:04 test_2.c-rw-------1 zxin10 dba 84Nov 416:04 test_3.c~/zhouzhaoxiong/zzx/mytest/a/more> gcc-c test_1.c test_2.c test_3.c~/zhouzhaoxiong/zzx/mytest/a/more> ll-rw-------1 zxin10 dba 96Nov 416:11 main.c-rw-------1 zxin10 dba 70Nov 416:04test.h-rw-------1 zxin10 dba 84Nov 416:04 test_1.c-rw-rw-rw-1 zxin10 dba 1624Nov 416:15 test_1.o-rw-------1 zxin10 dba 84Nov 416:04 test_2.c-rw-rw-rw-1 zxin10 dba 1624Nov 416:15 test_2.o-rw-------1 zxin10 dba 84Nov 416:04 test_3.c-rw-rw-rw-1 zxin10 dba 1624Nov 416:15 test_3.o~/zhouzhaoxiong/zzx/mytest/a/more> ar -r libtest.a test_1.o test_2.o test_3.oar: creating libtest.a~/zhouzhaoxiong/zzx/mytest/a/more> ll-rw-------1 zxin10 dba 96Nov 416:11 main.c-rw-rw-rw-1 zxin10 dba 5158Nov 416:15 libtest.a-rw-------1 zxin10 dba 70Nov 416:04test.h-rw-------1 zxin10 dba 84Nov 416:04 test_1.c-rw-rw-rw-1 zxin10 dba 1624Nov 416:15 test_1.o-rw-------1 zxin10 dba 84Nov 416:04 test_2.c-rw-rw-rw-1 zxin10 dba 1624Nov 416:15 test_2.o-rw-------1 zxin10 dba 84Nov 416:04 test_3.c-rw-rw-rw-1 zxin10 dba 1624Nov 416:15 test_3.o~/zhouzhaoxiong/zzx/mytest/a/more> gcc-o test main.c libtest.a~/zhouzhaoxiong/zzx/mytest/a/more> ll-rw-------1 zxin10 dba 96Nov 416:11 main.c-rwxrwxrwx 1 zxin10 dba 12008Nov 416:16test-rw-rw-rw-1 zxin10 dba 5158Nov 416:15 libtest.a-rw-------1 zxin10 dba 70Nov 416:04test.h-rw-------1 zxin10 dba 84Nov 416:04 test_1.c-rw-rw-rw-1 zxin10 dba 1624Nov 416:15 test_1.o-rw-------1 zxin10 dba 84Nov 416:04 test_2.c-rw-rw-rw-1 zxin10 dba 1624Nov 416:15 test_2.o-rw-------1 zxin10 dba 84Nov 416:04 test_3.c-rw-rw-rw-1 zxin10 dba 1624Nov 416:15 test_3.o~/zhouzhaoxiong/zzx/mytest/a/more>./testthisisin test_1......thisisin test_2......thisisin test_3...... #include<stdio.h>void test_a();#include"so_test.h"void test_a(){printf("this is in test_a...
");}#include"so_test.h"int main(){test_a();return0;}~/zhouzhaoxiong/zzx/mylib/so> ll-rw-------1 zxin10 dba 95Nov 417:37 so_test.h-rw-------1 zxin10 dba 109Nov 417:37test.c-rw-------1 zxin10 dba 84Nov 410:57 test_a.c~/zhouzhaoxiong/zzx/mylib/so> gcc test_a.c -fPIC -shared -o libtest.so~/zhouzhaoxiong/zzx/mylib/so> ll-rwxrwxrwx 1 zxin10 dba 8181Nov 417:43 libtest.so-rw-------1 zxin10 dba 95Nov 417:37 so_test.h-rw-------1 zxin10 dba 109Nov 417:37test.c-rw-------1 zxin10 dba 84Nov 410:57 test_a.c~/zhouzhaoxiong/zzx/mylib/so> gcctest.c -L.-ltest -o test~/zhouzhaoxiong/zzx/mylib/so> ll-rwxrwxrwx 1 zxin10 dba 8181Nov 417:43 libtest.so-rw-------1 zxin10 dba 95Nov 417:37 so_test.h-rwxrwxrwx 1 zxin10 dba 11805Nov 417:44test-rw-------1 zxin10 dba 109Nov 417:37test.c-rw-------1 zxin10 dba 84Nov 410:57 test_a.c~/zhouzhaoxiong/zzx/mylib/so>./testthisisin test_a...#include<stdio.h>void test_a();void test_b();void test_c();#include"so_test.h"void test_a(){printf("this is in test_a...
");}#include"so_test.h"void test_b(){printf("this is in test_b...
");}#include"so_test.h"void test_c(){printf("this is in test_c...
");}#include"so_test.h"int main(){test_a();test_b();test_c();return0;}~/zhouzhaoxiong/zzx/mylib/test_so> ll-rwxrwxrwx 1 zxin10 dba 8309Nov 509:12 libtest-rw-------1 zxin10 dba 70Nov 513:44 so_test.h-rw-------1 zxin10 dba 105Nov 415:25test.c-rw-------1 zxin10 dba 84Nov 415:25 test_a.c-rw-------1 zxin10 dba 84Nov 415:25 test_b.c-rw-------1 zxin10 dba 84Nov 415:25 test_c.c~/zhouzhaoxiong/zzx/mylib/test_so> gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so~/zhouzhaoxiong/zzx/mylib/test_so> gcctest.c -L.-ltest -o test~/zhouzhaoxiong/zzx/mylib/test_so> ll-rwxrwxrwx 1 zxin10 dba 8309Nov 513:46 libtest.so-rw-------1 zxin10 dba 70Nov 513:44 so_test.h-rwxrwxrwx 1 zxin10 dba 11883Nov 513:46test-rw-------1 zxin10 dba 105Nov 415:25test.c-rw-------1 zxin10 dba 84Nov 415:25 test_a.c-rw-------1 zxin10 dba 84Nov 415:25 test_b.c-rw-------1 zxin10 dba 84Nov 415:25 test_c.c~/zhouzhaoxiong/zzx/mylib/test_so>./testthisisin test_a...thisisin test_b...thisisin test_c...~/zhouzhaoxiong/zzx/mylib/test_so>lddtest linux-vdso.so.1=> (0x00007fff1db6e000) libtest.so =>/home/zhou/lib/libtest.so (0x00007fdbfff21000) libc.so.6=>/lib64/libc.so.6(0x00007fdbffb95000) /lib64/ld-linux-x86-64.so.2(0x00007fdc00124000)