学习“Linux下库文件的编程”后建立静态库和动态库

最近学习了在Linux子系统下建立静态库和动态库

我运用了老师在课堂上讲述的代码进行操作

我依据了老师博客的代码生成了add.c、sub.c、mul.c、div.c、mod.c、cal.h、 testCal.c这几个文件

1、没有库文件

此时需要建立Makefile文件,编写好后直接用命令make来实现

如果我们对其中的一些文件进行更改,再用make时会重新编译生成新的执行文件,使用make clean可以删除.o的中间文件。

如图为实现的结果

我们也可以通过gcc来形成目标文件,从而生成可执行文件,但Makefile文件的方便之处在于,可以用make指令把源文件编译成中间代码文件与可执行文件建立连接,从而实现我们的代码,实现相应的功能。这种便利之处会在代码文件很多的时候体现。

2、建立静态库

 

首先创建libSamp目录,然后用指令ar rcs libTYX.a add.o sub.o mul.o div.o mod.o建立libTYX.a的静态库,llib是库文件固定的前缀;.a是库文件的后缀;而TYX是文件的名称。

再用指令cp testCal.c cal.h libTYX.a libStemp/将静态库、测试文件、头文件复制到libStemp目录下

执行"gcc -o test test.c -stastic -L. -lTYX"命令,使用静态库,创建库文件的接口文件头文件cal.h且库文件的文件testCal.c包含头文件cal.h文件。

指令中gcc是编译器,-o为指定文件名,testCal为最终生成的文件,-stastic表示使用静态库,是一个固定的命令,-L指明使用库,后面的.表明库文件在当前目录,-lTYX里的第一个l是lib的意思,后面带的是库文件的名称。

通过ls指令我们可以看到生成的最终可执行文件。

虽然使用动态库文件的可执行文件的大小为958552字节,看起来比较大,但是它具有很好的保密性,即使换了环境也能够实现代码,非常便捷。

这里只截下了编译过程

3、动态库的建立

首先创建libso目录,再运行make命令,通过makefile文件生成目标文件testCal.o add.o sub.o mul.o div.o mod.o,再用cp *.o libso/cp testCal.c cal.h libso/指令将我们的.o文件和头文件以及testCal.c源文件复制到我们建立的目录libso下.再使用命令"gcc -shared -fPIC -o liblTYX.so"命令来生成最终的动态库。使用gcc编译,-o指定文件名,-shared:指明生成动态库,-fPIC.:该选项告诉gcc产生的代码不要包含对函数和变量具体内存位置的引用,运行时进行地址链接  。再使用gcc -o testCal testCal.c -L. -lcal来生成可执行文件。

由图可以看出,当运行系统时,显示没有该文件,看了老师博客才知道运用命令export LD_LIBRARY_PATH=$(pwd),连接器会搜索LD_LIBRARY_PATH指定的目录,将该环境变量设置为当前目录。而之前的默认的动态库搜索路径为/usr/lib。一个稍加注意就可以解决的问题,我居然因为大意而浪费了很多时间。

路漫漫其修远兮,吾将上下而求索

猜你喜欢

转载自www.cnblogs.com/tuyuxin/p/12547374.html
今日推荐