函数库分为静态库和动态库两种。
静态库
在程序编译时
会被连接
到目标代码
中,程序运行时
将不再需要该静态库
。
这类库的名字一般是libxxx.a
。
动态库
在程序编译时
并不
会被连接
到目标代码中
,而是在程序运行
是才被载入,因此在程序运行时还需要动态库
存在。
这类库的名字一般是libxxx.so
。
静态库的创建
一、#include <>
代表标准头文件,
只要头文件在标准目录中
/usr/local/include //第三方库的头文件,编译器会先检查这个。
/usr/include //操作系统的头文件
二、#include ""
为本地头文件编译程序
三、共享.h
都文件
- 1、把头文件放到标准目录中。
- 2、
include
语句中使用完整路径。 - 3、用gcc -I选项指定头文件目录。
四、nm
命令
nm命令.jpg
五、ar
存档命令
ar命令.jpg
- 所有
.a
文件都是libXXX.a形式命名的。 - 存档是
静态库
(static library
)。 - 把
.a
文件保存在标准目录中。 - 也可以放到自己的库目录中。
- `ar -t<文件名>命令会列出存档中的目标文件。
-
ar -x<文件名.a> <文件名.o>
会从存档中取出想要的目标文件。
六、利用库文档编译其他程序
gcc_ar.jpg如果使用的是自建的库;
gcc test_code.c -L/my_lib -lhfsecurity -o test_code
动态库的创建
动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。
都是由*.o目标文件生成。
一、创建目标代码
fPIC.jpg在创建hfcal.o时,多加了一盒标志
-fPIC
。它告诉gcc创建位子无关的代码。事实上大多系统不需要加这个选着。
位置无关代码:计算机把它加载到存储器的哪个位置都可以运行的代码。
二、不同平台的动态库
- 在
Windows
中动态库通常叫动态链接库
,后缀名是.dll
。 - 在
Linux
和Unix
上叫共享目标文件
,后缀名.so
。 - 而在
MAC
上,它们叫动态库,后缀名.dylib
。 - 尽管后缀名不同,但是创建它们的方法相同。
gcc-shared.jpg
-shared
选项告诉gcc你想把.o文件转化为动态库。
假设在linux中创建一个叫libhfacl.so的库,,那么libgfcal.so就会记住它的苦命叫hfcal。
注意:
- 一旦用了某个名字编译了库,就不能载修改文件名了,若想从命名库,就必须用心的名字重新编译一次。
- 一些老的MAC系统上没有
-shared
,可以用-dynamiclib
代替。
网友评论