栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

linux下生成动态库(共享库)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux下生成动态库(共享库)

1.程序的目录结构:

---include                  #存放.h文件

---lib                          #存放要生成的动态库

---src                          #存放.c文件,要封装成库的函数

---main.c                  #要实现功能的程序(用于测试动态库的接口)

2.实现方法

在src中:

                gcc -fPIC -c *.c -I../include                        #生成.o文件

                gcc -shared -o libmytest.so *.o -Iinclude  #生成动态库

                mv   libmytest.so  ../lib                

注意: .o文件必须以上面的命令生成的,这样才是与位置无关的代码(由于动态库的代码不会包含在应用程序中,而是程序运行时,再给多个动态库分配地址,所以动态库的代码位置时不固定的。而在静态库中库的代码直接打包到了程序中,所以有固定的代码段)

            动态库文件必须以lib开头,以.so结尾

3.使用

gcc  main.c   -o test -I include  ./libmytest.so

或 gcc  main.c -o  test  -Iinclude  -L./lib  -lmytest

4.如果发给用户时

1)ldd  程序名    #看一下是否所有的库都在lib目录下,没有的话加上

2)此时用户不能直接运行程序,因为动态库并未打包到程序中,需要由系统进行加载对应的动态库

解决办法1:(不建议用,放到系统目录,如果有相同名称的库会导致系统库误删)

                    sudo  cp  lib/libmytest.so  /lib/          #将动态库放到  /lib/目录下

                    ldd  程序名   发现库已经加载

解决办法2:(临时解决的方法,关掉终端,再打开后,就会失效,适合临时的库或程序测试)

                    export  LD_LIBRARY_PATH=./lib        #将自定义动态库路径导入

                    echo  $LD_LIBRARY_PATH        #自定义的动态库变量,系统会优先读此路径

解决办法3:(建议用,永久设置,常用) 

                    vim /etc/ld.so.conf        #进入这个文件,把自己的库路径添加到第二行

                    ldconfig                        #更新系统的库路径,需要权限就加上sudo,需要打印加-v

                    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/881114.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号