将自己写的链表生成共享库
1、编译
2、设置库名:
库的名称格式:lib + XXX + 版本号.so (库的名称为XXX)
-shared 生成共享文件库 -fpic 动态链接
![linux下共享库的制作及常见的问题](https://s1.51cto.com/images/blog/201712/02/05afe2074d3dfa11f49ffae7ebd9fafc.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
3、把头文件和.so文件放到系统目录下
![linux下共享库的制作及常见的问题](https://s1.51cto.com/images/blog/201712/02/dd8fc12ca7e193396d3a3b80e1508396.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
(使用共享库了,把之前的#include “list.h” 改成 #include < list.h > ,删除该文件夹内的list.* ,就可以运行成功了)
4、链接库:gcc main.c -o main -lList
![linux下共享库的制作及常见的问题](https://s1.51cto.com/images/blog/201712/02/6e1e3b4fc425cf317b1ceca5f7685588.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
注意:如果.h没有放在系统路径下,要使用-I路径
如果.so没有放在系统路径下,要使用-L路径
如果共享库并没有放在系统路径下,如何解决运行时找不到的问题
1) 首先,把.h和.so移动到非系统路径下,链接生成可执行文件,运行时找不到:
![linux下共享库的制作及常见的问题](https://s1.51cto.com/images/blog/201712/02/6a97fbd1bde7fda5ec83c4ef5de33da4.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
2) 解决方法1:修改共享库配置文件/etc/ld.so.conf,把.so的路径加入到配置文件中;执行:ldconfig
![linux下共享库的制作及常见的问题](https://s1.51cto.com/images/blog/201712/02/67b2a8e8285501c16f660893b5d1a231.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
解决方法2:配环境变量LD_LIBRARY_PATH
(不过,这种方法是临时的,只对当前用户本次登录有效)
![linux下共享库的制作及常见的问题](https://s1.51cto.com/images/blog/201712/02/1c89d46742816546b697aba56386c749.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
也可以查看环境变量的值:$LD_LIBRARY_PATH
然后修改,LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/mnt/hgfs/share/