1.#include<> 编译器在标准头文件中查找头文件
#include“” 编译器在本地头文件中查找头文件
2.共享.h头文件
- 把头文件复制到标准目录中,在源代码中用 #include<> 包含
- 在include语句中使用完整路径 #include “/my_header_files/encrypt.h”
- 使用编译器gcc -I选项
3.共享.o目标文件
把.o目标文件放在一个类似于共享目录的地方,当编译程序时在目标文件前加上完整路径
如 gcc -I/完整路径
4.共享一批文件:建立目标文件存档
5.用nm命令查看存档中的内容 如:nm libl.a
用ar命令创建存档 如:ar -rcs libhfsecurity.a encrypt.o checksum.o
(其中r表示如果.a文件存在就更新他,c表示创建存档时不显示反馈信息,s告诉ar要在.a文件开头建立索引,
libhfsecurity.a是要创建的.a文件名,
encrypt.o checksum.o是两个将保存在存档中的文件)
用-l命令编译标准目录中的代码 如:gcc test_code.c -lhfsecurity -o test_code
(hfsecurity叫编译器去找一个叫libhfsecurity的存档,若使用多个存档可以设置多个-l选项)
用-L命令编译其他目录中的代码 如:gcc test_code.c -L/my_lib -lhfsecurity -o test_code
用ar -t<文件名>查看存档中的内容
用-x提取文件 如:用ar -xlibhfsecurity.a encrypt.o把encrypt.o从libhfsecurity.a中提取出来
6.保存在静态库中的所有.a文件都要以libXXX.a的形式命名。(这是命名存档的标准形式,否则编译器找不到他们)
7.可以把存档保存在库目录中,用哪个库目录有两种选择
标准目录,如/usr/local/lib(这个目录专门用来放本地自定义库)
其他目录,如/my_lib
8.静态链接 一旦用独立的目标代码创建了可执行文件,就没有办法修改这些原料,除非重新构建整个程序
动态链接 程序由很多单独的文件组成,程序运行前把他们链接到一起
9.创建动态库
创建目标文件:gcc -I/includes -fPIC -c hfcal.c -o hfcal.o( -fPIC告诉gcc你想创建位置无关代码,常可省略)
创建动态库:gcc -shared hfcal.o -o/libs/libhfcal.dll.a(不同操作系统中后缀不同,windows上为.dll.a,Linux和Unix上为.so,Mac上为.dylib)
编译:同静态库
10.修改动态库名称后,必须重新编译他