找不到error while loading shared libraries: libevent-2.1.so.6共享库的问题

找不到库的问题

没有安装libevent,先安装

报错信息如下

$ ./event 
./event: error while loading shared libraries: libevent-2.1.so.6: 
cannot open shared object file: No such file or directory

查看缺什么库

$ ldd event
        linux-vdso.so.1 =>  (0x00007ffec6fda000)
        libevent-2.1.so.6 => not found
        libc.so.6 => /lib64/libc.so.6 (0x00007fab80936000)
        /lib64/ld-linux-x86-64.so.2 (0x000055d1c17e1000)
$ ./event 
^CCaught an interrupt signal; exiting cleanly in two seconds.
done

查看 libevent-2.1.so.6 是否存在

$ cd /usr/local/lib
$ ll | grep libevent-2.1.so.6
lrwxrwxrwx. 1 root root      21 Apr 18 21:23 libevent-2.1.so.6 -> libevent-2.1.so.6.0.2
-rwxr-xr-x. 1 root root 1325512 Apr 18 21:23 libevent-2.1.so.6.0.2
lrwxrwxrwx. 1 root root      21 Apr 18 21:23 libevent.so -> libevent-2.1.so.6.0.2

系统显示已安装(注意,如果你安装libevent时,指定了自定义的路径--prefix=/usr/xxx参数,结果是不一样的)。

映射

解决,映射 libevent-2.1.so.6 到 /lib64 路径中

sudo ln -s /usr/local/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6

本文libevent版本为libevent-2.1.8-stable.tar.gz,系统为centos7。

参考1

共享库(shared library)/动态库

共享库在程序编译时并不会被连接到目标代码中, 而是在程序运行是才被载入. 不同的应用程序如果调用相同的库, 那么在内存里只需要有一份该共享库的拷贝, 规避了空间浪费问题.动态库在程序运行时才被载入, 也解决了静态库对程序的更新、部署和发布会带来麻烦. 用户只需要更新动态库即可, 增量更新. 为什么需要动态库, 其实也是静态库的特点导致.

按照习惯, 一般以”.so”做为文件后缀名. 共享库的命名一般分为三个部分:

  • 前缀:lib
  • 库名称:自己定义即可, 如test
  • 后缀:.so

所以最终的动态库的名字应该为:libtest.so
在这里插入图片描述

共享库的制作

  • 生成目标文件.o, 此时要加编译选项:-fPIC(fpic)
gcc -fpic -c fun1.c fun2.c

参数:-fpic创建与地址无关的编译程序(pic, position independent code), 目的就是为了能够在多个应用程序间共享.

  • 生成共享库, 此时要加链接器选项: -shared(指定生成动态链接库)
gcc -shared fun1.o fun2.o -o libtest2.so

共享库的使用

共享库的使用

引用动态库编译成可执行文件(跟静态库方式一样):

用到的参数:

Ø -L:指定要连接的库的所在目录

Ø -l:指定链接时需要的动态库, 去掉前缀和后缀

Ø -I: 指定main.c文件用到的头文件head.h所在的路径

如何让系统找到共享库

Ø 拷贝自己制作的共享库到/lib或者/usr/lib

临时设置

Ø 临时设置LD_LIBRARY_PATH:

 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径 

永久设置方法一

Ø 永久设置, 把export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径, 设置到∼/.bashrc文件中

  1. 执行. ~/.bashrc使配置文件生效(第一个.后面有一个空格)

  2. 执行source ~/.bashrc配置文件生效

  3. 退出当前终端, 然后再次登陆也可以使配置文件生效

永久设置方法二

Ø 永久设置,把export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径,设置到/etc/profile文件中

永久设置方法三

Ø 永久设置,将其添加到 /etc/ld.so.cache文件中

编辑/etc/ld.so.conf文件, 加入库文件所在目录的路径

运行sudo ldconfig -v, 该命令会重建/etc/ld.so.cache文件

参考2

参考error while loading shared libraries: libevent-2.1.so.6 的解决办法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值