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

                    

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值