将我们的代码打包成一个库文件可以增加我们代码的安全性。那么静态库和动态库该如何建立呢?

今天我将老师所讲的内容整理了一下并对自己的一个简单代码进行了运用,将一些过程和体会写下来。

 

下面是我的一些代码,因为主要是深化一下课堂内容,所有我写了个非常简单的程序。

test.h(头文件)

ios 动态创建UIImageView 如何创建动态库_动态库

 

test1.c(功能函数)

ios 动态创建UIImageView 如何创建动态库_动态库_02

 

test.c(测试文件)

ios 动态创建UIImageView 如何创建动态库_静态库_03

 

 

(1).没有库文件的处理

首先我们建立一个Makefile文件,编写好之后直接用make命令。如下,是我的一个Makefile文件。

ios 动态创建UIImageView 如何创建动态库_动态库_04

 

然后直接进行运行。下面是一些运行步骤。

ios 动态创建UIImageView 如何创建动态库_动态库_05

如上所示,是我没有建立库的编译与实现。首先建立一个Makefile文件,这样我们就可以直接使用make命令将我们的源文件编译成中间代码文件并把中间代码文件同可执行文件链接起来,也许在你的代码很少的情况下看不出其中的方便,但是一旦你的代码文件很多的时候,你就会对它的方便深有体会。

 

(2).静态库的建立

ios 动态创建UIImageView 如何创建动态库_ios 动态创建UIImageView_06

ios 动态创建UIImageView 如何创建动态库_ios 动态创建UIImageView_07

 

如上图,我们首先建立一个lib目录,我这里建立的是libSamp目录,然后利用命令“ar rcs liblhq.a test1.o",其中liblhq.a里的lib是库文件固定的前缀;.a是库文件的后缀;而lhq则是文件的名称,可自行命名;test1.o则是除了我们的测试文件对应的.o文件外的所有中间目标文件,我这里只有一个。

之后利用"cp test.c test.h liblhq.a libSamp"命令将我们的测试文件和头文件以及静态库复制到libSamp目录下。

紧接着进入我们创建的libSamp目录下,执行"gcc -o test test.c -stastic -L. -llhq"命令,使用静态库,创建库文件的接口文件头文件。其中gcc是编译器,而-o表示指定的目标文件,test是我的最终生成的文件,-stastic表示使用静态库,是一个固定的命令,-llhq里的第一个l是lib的意思,后面带的是库文件的名称。

之后我们ls可以看到生成了一个最终的文件,之后我们就可以运行了。

当我们进入到最终的文件时,里面就只看到一堆乱码。这样对我们的代码就起到了很好的保护。

ios 动态创建UIImageView 如何创建动态库_静态库_08

 

(3).动态库的创建

ios 动态创建UIImageView 如何创建动态库_静态库_09

 

动态库的建立和静态库有很多相似之处,首先我们创建一个目录,然后将我们的.o文件和头文件以及test.c源文件复制到我们建立的目录下,然后进入到目录,使用命令"gcc -shared -fPIC -o liblhq.so"命令来生成我们最终的动态库,再利用"gcc -o test test.c -L. -llhq"来生成我们的可执行文件,这里我们会发现,和静态库相比,我们的这条命令只少了"-static"。对的,没有"-stastic"就是动态库下生成可执行文件的命令。

可是当我们运行程序的时候会发现,这里会提示我们文件不存在,这是因为默认的动态库搜索路径是/usr/lib,我们可以直接利用命令"export LD_LIBRARY_PSTH=$(pwd)"来将该环境变量设置为当前目录。

之后再运用就不会有问题了。

 

总结体会:这次老师对于静态库与动态库建立的讲解,让我之前的一些疑问得到了解决,更让我深化了Makefile文件的作用,以及纠正了我编写Makefile文件的错误。之前我只知道如果我们都中间目标文件很多的时候可以打包成一个库文件,可是一直没有理解和很好的运用它是如何打包的。