Linux下生成动态链接库

【摘要】动态链接库是在编译器编译之后生成  obj 文件之后,将几个链接文件和动态链接库中的文件链接起来,在链接器中将几个目标文件组合在一起然后生成可执行文件  exe 文件,而生成动态链接库的这一步骤是由编译器自己完成的,它可以调用自己已经处理好的库函数,在需要时直接拿出来使用就好了。而今天,我要分享给大家一个可以自己实现动态链接库生成的小技巧,别说,这种小技巧在面试中还是会被经常问到的哦。
方法一:

第一步:

先编写两个 .c 文件(为了方便,我写了一个最简单的 add.c main.c 。add.c 就是直接做加法运算,main.c 是对 add函数的调用
第二步:

       这一步很关键,要生成add的库文件 libadd.so (后面的名字是我自己起的,方便理解,你们也可以起其他的名字,但是一定要加上后缀 .so ,这是库文件的后缀)
       输入命令行  ——>   gcc -fpic -shared add.c -o libadd.so
       经过这个步骤,你的文件夹下 用 ls 就可以看到已经生成了 libadd.so 

第三步:
       生成了动态库之后,我们需要把动态库和 main.c 文件通过系统编译器链接在一起进行编译,生成 a.out 可执行文件

输入命令行——> gcc libadd.so main.c
现在你再次 ls 一下,就会发现文件夹下又多了一个 a.out 文件。但是,你现在直接 ./a.out ,系统会报错,大概意思就是找不到你的动态库地址,,这个时候你需要找到你的动态库拷到  /lib/库中,这样才可以被系统检测到

第四步
将你自己的动态库拷到/lib/目录下  

输入命令——>cp libadd.c /lib/
这个时候就已经大功告成了,你再次使用命令 ./a.out 程序就会顺利执行并且输出结果了。

方法二:


方法二的前三步和方法一都是一样的,所以如果你要想在方法一试过之后再尝试方法二,那你就需要删除 a.out 和 libadd.so 这俩文件了。
第四步:
  现在我们已经知道了,如果系统没有找到我们自己生成的动态库的路径,就无法通过编译,在方法一里面,我们是直接将动态库拷到了 /lib/目录下,相当于充当了一个库文件,这次我们直接 vim 一把 ,将动态库的路径写到一个一个库文件中
输入命令行——>   vim /etc/ld.so.conf.d/ku.conf
第五步:
       刷新一下缓冲区
  输入命令行——> ldconfig
  然后你再次输入 ./a.out 也可以相应的输出结果啦,是不是并没有那么难呢。


但是,切记,你的动态库再使用完之后还是尽快删除吧。尽管这个库文件不是很大,也没有占用多少内存,但是,在以后的实际工作中,如果你要编写的代码量很大时,还是很耗费内存的。为了减少不必要的浪费,记得删除你自己的动态库文件哦。

猜你喜欢

转载自blog.csdn.net/zb1593496558/article/details/79993181