Head First C 第八章 静态库与动态库 建立动态库

Head First C 第八章 静态库与动态库 建立动态库

动态库是什么

静态库文件,须要在连接过程当中和主程序连接在一块儿,若是你想改变某个部分的功能,或者发布不一样版本,就须要修改这个代码并所有从新编译,须要作不少的重复操做,所以引入动态库的概念,动态库不须要在编译时连接,更容易改变。git

动态库的建立

静态库同样,建立静态库须要.o文件github

  1. 建立.o文件 gcc -I./includes -fPIC -c hfcal.c -o hfcal.o -fPIC表示建立位置无关代码,如今大部分的操做系统都不须要输入这一命令。 -I指定头文件位置 -c表示只编译,-o表示目标文件路径和名称

位置无关代码,就是不管计算机把它加载到存储器的哪一个位置,均可以运行的代码。操作系统

  1. 建立动态库 Linux下: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。

如何使用动态库

  1. 咱们有了主程序代码的目标文件(.o),咱们能够使用和静态库同样的方式来编译主程序。 gcc elliptical.o -I./includes -L./libs -lhfcal -o elliptical 虽然命令同样,可是gcc作的事却不尽相同,使用静态库时,gcc会把静态库和主程序目标文件通通缝合在一块儿,可是使用动态库时,gcc只会在目标可执行文件中插入一段用来查找库位置的占位符,在运行时去连接。 这么看起来动态连接库这个名字取得棒极了。
  2. 不一样系统下动态库的使用 在Mac OS X 下,编译程序时,会把动态库的路径保存在可执行文件中,程序运行时知道从哪里去找这个动态库。 在Windows中,会如今当前目录下查找,若是没找到,就会去找保存在PATH中的目录。 但在Linux和大部分Unix中不同,系统只会从环境变量LD_LIBRARY_PATH中查找动态库,咱们有两种方法能够解决这个问题:
    1. 把咱们的动态库拷贝到系统动态库目录下usr/local/lib
    2. LD_LIBRARY_PATH中添加咱们的当前目录

修改程序的动态库

当咱们的程序应用于不一样场景,有一个动态库中的功能再也不适用了,咱们要作的就是,修改这一个动态库,与其余文件无关。code

代码

dynamic library sampleip

相关文章
相关标签/搜索