原有工程文件:test.c test.h
静态编译指令
生成可执行文件:
gcc -c test.c -o test.o
生成静态库:
ar rc libtest.a test.o
静态编译源文件:
gcc hello.c -o hello ./libtest.a
动态编译指令
生成动态库:
gcc -shared -fPIC -o libtest.so test.c
动态编译源文件:
gcc hello.c -o hello ./libtest.so
静态库与动态库区别
两者的区别其实很小,静态库是必须要链接到执行文件中去的,而动态库是不需要链接到最后的执行文件中的。怎么理解呢?也就是说,对于最后的执行文件而言,你是否删除静态库无所谓。但是,一旦你删除了动态库,最后的执行文件就玩不转了。