Head First C学习之动态库于静态库

2016-04-01  本文已影响44人  燚随风

函数库分为静态库和动态库两种。

静态库在程序编译时会被连接目标代码中,程序运行时将不再需要该静态库
这类库的名字一般是libxxx.a
动态库在程序编译时会被连接目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。
这类库的名字一般是libxxx.so

静态库的创建

一、#include <>代表标准头文件,

只要头文件在标准目录中

/usr/local/include //第三方库的头文件,编译器会先检查这个。 
/usr/include            //操作系统的头文件

二、#include ""为本地头文件编译程序

三、共享.h都文件

四、nm命令

nm命令.jpg

五、ar存档命令

ar命令.jpg

六、利用库文档编译其他程序

gcc_ar.jpg

如果使用的是自建的库;

gcc test_code.c -L/my_lib -lhfsecurity -o test_code

动态库的创建

动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。
都是由*.o目标文件生成。

一、创建目标代码

fPIC.jpg
在创建hfcal.o时,多加了一盒标志-fPIC。它告诉gcc创建位子无关的代码。事实上大多系统不需要加这个选着。

位置无关代码:计算机把它加载到存储器的哪个位置都可以运行的代码。

二、不同平台的动态库

  • 一旦用了某个名字编译了库,就不能载修改文件名了,若想从命名库,就必须用心的名字重新编译一次。
  • 一些老的MAC系统上没有-shared,可以用-dynamiclib代替。

编译程序是实用的命令和静态存档是一样的。

不同平台运行时,会有一些差异性,就是配置动态库的环境变量。

上一篇下一篇

猜你喜欢

热点阅读