嗨翻C语言——静态库与动态库(8)

1、在进行文件加密时,需要先将源文件编译为目标文件

gcc -c 目标文件.c

2、 在库目录中创建一个包含多个.o文件的存档
(1)进入MinGW中的lib目录下,后缀为.a的即为存档。
(2)用ar命令创建存档

ar -rcs libhfsecurity.a encrypt.o checksum.o

-r表示如果.a存档存在就更新它
-c表示创建存档时不要显示反馈信息。
-s告诉ar要在.a存档开头建立索引。
.a为新创建的.a存档
.o文件为保存在.a存档中的文件
3、所有.a文件名都是libXXX.a的形式,这是命名存档的标准方式,存档是静态库。
4、创建库存档是为了能在其他程序中使用它,当把存档安装到标准目录后,就可以用-l开关编译代码。

gcc test_code.c -lhfsecurity -o test_code

如果想把存档放在其他地方,使用-L选项

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

5、程序由不同代码组建而成,先创建.o文件和.a存档,然后再把它们链接成可执行程序。程序链接以后就变成了一大块目标代码,没有办法把显示代码和传感器代码分开。因为它们在编译程序时静态链接在了一起。
6、动态库的核心是一段目标代码;动态库由一些额外信息,操作系统需要用这些信息把库链接到程序;动态库由一个或多个.O文件创建。
7、动态库创建目标文件

gcc -I/includes -fPIC -c hfcal.c -o hfcal.o

-fPIC告诉gcc创建位置无关代码
8、位置无关代码是无论计算机把他加载到存储器的哪个位置都可以运行的代码,其可以在存储器中搬来搬去。
windows操作系统在加载动态库时会使用一种叫存储器映射的技术。
9、动态库一种平台一个叫法,后缀名不同,创建方法相同
Windows:动态链接库,后缀为.dll
Linux和Unix:共享目标文件,后缀名.so
Mac:动态库,后缀名.dylib

gcc -shared hfcal.o -o C:\libs\hfcal.dll(Windows上的MinGW)
gcc -shared hfcal.o -o /libs/libhfcal.dll.a(Windows上的cygwin)
gcc -shared hfcal.o -o /libs/libhfcal.so
gcc -shared hfcal.o -o /libs/libhfcal.dylib

-shared选项告诉gcc把.o目标文件转换为动态库
注:一旦用哪个名字编译了库,就不能再修改文件名。
在一些古老的Mac系统上,没有-shared选项
10、动态库创建完成时,可以像静态库那样使用它。
11、如果用MinGW编译了程序,在运行前需要确定环境
在这里插入图片描述

12、编译新版动态库

gcc -c -fPJC hfcal_UK.c -o hfcal.o           //把源文件编译为目标文件
gcc -shared hfcal.o -o /usr/local/lib/libhfcal.so     //把目标文件转换为共享目标文件

13、当动态库和头文件安装在标准目录中,在编译时不需要使用-l标准,运行代码也不需要设置LD_LIBRARY_PATH变量。
14、当想改变动态库的名字,于是重命名了文件名,但是编译器找不到:
编译器在编译动态库时会在文件中保存库名。如果文件重命名了,文件中的名字还没变,如果性修改动态库的名字,就必须重新编译。

猜你喜欢

转载自blog.csdn.net/weixin_46504000/article/details/129245319