Linux 中静态库,动态库的制作与使用。

1.静态函数库

        程序执行之前就加载目标的程序中去了,静态库可以对源代码进行加密,只提供函数库供他人使用。

静态库的创建与使用

    (1)使用gcc +材料 -c  获得 ".o"后缀文件

    (2)使用ar软件 生成静态库 ar -rcs +库名(libxxx.a)+xxx.o

    (3)编译链接静态库

例:main.c func.c func.h 三个文件 ,main.c调用了func.c

      1.使用gcc +材料 -c  获得 ".o"后缀文件

gcc func.c -c

生成文件:func.o

      2.使用ar生成 以 ".a"为后缀  ar rcs 库名(libxxx.a) +材料(xxx.o)

ar rcs libtestfunc.a func.o

生成文件:lintestfunc.a

     3.使用静态库 ,使用gcc main -ltestfunc -L ./ 

gcc main.c -ltestfunc -L ./

输出可执行文件:a.out

   //    -l 是链接用的库,库名称砍头去尾,例 libtestfunc.a  ,使用 -ltestfunc 即可 

  //    -L 告诉编译器从指定的路径去找,默认会从 /usr/lib   /usr/local/lib 去找)


2.动态函数库

        动态库和共享库时一个东西,文件后缀是".so" ,程序只想是动态(临时)由目标程序所调用.

        动态库的命名规则:

         基本上动态库都必须以"lib"为前缀,下来是动态库的名称(这个自定义),下来是".so",最后是版本的信息

动态库的制作

        (1)编译生成动态库:gcc –fPIC –shared –o libxxx.so myxxx.c,得到".so"

              //  -fPIC 用于编译阶段,在生成目标文件是就得使用该选项,以生成位置无关的代码。

             //  -shared 指定生成动态库。

动态库的使用

例:main.c,count.c,count.h 三个文件    main.c 调用了count.c      

        编译生成动态库得到".so"

 gcc –fPIC –shared –o libcount.so count.c

得到:libcount.so

        编译 gcc main.c -lcount -L ./ 生成 a.out,-lcount表示链接libcount.so

        直接运行a.out会得到以下的错误提示

./a.out: error while loading shared libraries: libcount.so: cannot open shared object file: No such file or directory

        提示你找不到libcount.so这个库,因为动态库是程序执行是临时加载到进去的。

        解决方法一:将libcount.so拷贝到 /usr/lib/  里面去,它执行的时候就会从/usr/lib/ 里面去找,那如何让它从当前路径开始去找呢?,那就要用到第二种方法。

        解决方法二:通过修改环境变量LD_LIBRARY_PATH来指定动态库搜索的路径。

export LD_LIBRARY_PATH="(当前库的绝对路径)"

但是这个环境变量是临时的只是针对于当前页面或者窗口,所以可以写一个脚本  start.sh

export LD_LIBRARY_PATH="(当前库的绝对路径)"
./a.out​

在给start.sh 加上可执行权限(chmod +x start.sh)就ok啦,这样不管换几个窗口页面都可以执行。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走下去-别回头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值