静态库文件,须要在连接过程当中和主程序连接在一块儿,若是你想改变某个部分的功能,或者发布不一样版本,就须要修改这个代码并所有从新编译,须要作不少的重复操做,所以引入动态库的概念,动态库不须要在编译时连接,更容易改变。git
和静态库同样,建立静态库须要.o文件github
gcc -I./includes -fPIC -c hfcal.c -o hfcal.o
-fPIC表示建立位置无关代码,如今大部分的操做系统都不须要输入这一命令。 -I指定头文件位置 -c表示只编译,-o表示目标文件路径和名称位置无关代码,就是不管计算机把它加载到存储器的哪一个位置,均可以运行的代码。操作系统
gcc -shared hfcal.o -o ./libs/libhfcal.so
Mac OS X下:gcc -shared hfcal.o -o ./libs/libhfcal.dylib
在Linux和Unix上,动态库被叫作共享目标文件,在Mac OS X上,叫作动态库,在Windows上叫做动态连接库。 静态库使用ar命令生成的,而动态库要用gcc。gcc elliptical.o -I./includes -L./libs -lhfcal -o elliptical
虽然命令同样,可是gcc作的事却不尽相同,使用静态库时,gcc会把静态库和主程序目标文件通通缝合在一块儿,可是使用动态库时,gcc只会在目标可执行文件中插入一段用来查找库位置的占位符,在运行时去连接。 这么看起来动态连接库这个名字取得棒极了。当咱们的程序应用于不一样场景,有一个动态库中的功能再也不适用了,咱们要作的就是,修改这一个动态库,与其余文件无关。code