error while loading shared libraries错误解决办法

Last updated on 8 months ago

最近想实现 Reactor 多线程模式,因为线程池可以使用了,接下来尝试 将epoll 封装下一些api, 后来想到 有个框架 Libevent 也是基于事件通知机制的库,将epoll封装成api,方便调用,以前有看过一点,但是没有用过,所以现在站在巨人的肩膀上看看他们是怎样写的:

看源码之前需要将这个代码跑通,起码会用才行,从编译源代码,到运行demo都遇到了些问题,这里做个总结吧

clone 源码然后 make 这些就不说了,make 时出现个问题

1
2
3
4
bufferevent_openssl.c:228:19: error: storage size of 'methods_bufferevent' isn't known
static BIO_METHOD methods_bufferevent = {
^~~~~~~~~~~~~~~~~~~
Makefile:793: recipe for target 'bufferevent_openssl.lo' failed

后来查了下 是 openssl 版本不不兼容, 期初我在官网下的 Libevent是2.0.2

openssl 是什么: openssl则是SSL的实现版(SSL https加密哪个 ),另外openssl还包含了公钥私钥的生成、摘要生成等各种工具

image-20220410001448008

libevent 2.0.x版本的 openssl < 1.1.0 ,不兼容,现在 Linux openssl 普遍 版本都是1.1.0+

image-20220410001724343

解决方法: 用 libevent 2.1.x+ 以上的版本


使用 libevent 库 编译过了,执行程序时报错

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

问题 找不到共享库?

原因: 编译器只会使用 /lib/usr/lib 这两个目录下的库文件, 编译源码的时候没有指定 库安装的目录,运行程序需要链接动态库时就找不到,所以现在需要添加 这个库的目录

解决方法:

  • 先看下系统 是否有这个库 ,找到 库的位置

image-20220410002648057

  • 动态库文件所在的目录 在 **/etc/ld.so.conf ** ,将 libevent-2.1.so.6所在的目录添加到该文件下

    image-20220410003108601

  • 执行 /sbin/ldconfig -v 才会生效

如果还不行,而且确实有 有库存在,可以看下 是否是 权限问题