执行可执行程序时遇到error while loading shared libraries错误解决

news/2024/11/17 15:50:28/

执行可执行程序时遇到error while loading shared libraries错误解决

执行 ./provider -i test.conf 编译引用了第三方库zookeeper_mt.so的代码后,执行出现了以下错误

error while loading shared libraries: libzookeeper_mt.so.2: cannot open shared object file: No such file or directory

这就是依赖的动态库找不到路径导致的。

示例是我处理的过程如下,最后成功执行:

[root@localhost ~]# ./provider -i test.conf
error while loading shared libraries: libzookeeper_mt.so.2
cannot open shared object file: No such file or directory
[root@localhost ~]# find / -name libzookeeper_mt.so.2find: ‘/run/user/1000/gvfs’: Permission denied
/usr/local/lib/libzookeeper_mt.so.2
/opt/zookeeper-3.4.10/src/c/.libs/libzookeeper_mt.so.2
[root@localhost ~]# ldconfig
[root@localhost ~]#  ./provider -i test.conf
error while loading shared libraries: libzookeeper_mt.so.2
cannot open shared object file: No such file or directory
[root@localhost ~]# echo "/usr/local/lib" >> /etc/ld.so.conf
[root@localhost ~]# ldconfig
[root@localhost ~]#  ./provider -i test.conf

解决方法有3种:

  1. 如果共享库文件安装到了/lib或/usr/lib目录下, 执行一下ldconfig命令。
    ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*),然后创建出动态装入程序(ld.so)所需的连接和缓存文件,缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表。

  2. 如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下,在执行ldconfig命令前,需要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中,如下:

[root@localhost ~]#cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
[root@localhost ~]#echo "/usr/local/lib" >> /etc/ld.so.conf
[root@localhost ~]#ldconfig
  1. 如果共享库文件安装到了其它"非/lib或/usr/lib" 目录下,但是又不想在/etc/ld.so.conf中加路径(或者是没有权限加路径)。那可以export一个全局变量LD_LIBRARY_PATH,然后运行程序时会去目录中找共享库。此方法在当前用户下配置环境变量只是临时生效,如果服务器不重启那可能一直有效。万一重启了,就失效了,相当于一次性的设置。
    LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库。可以设置多个搜索目录,这些目录之间用冒号分隔开
    比如安装了一个mysql到/usr/local/mysql目录下,其中有一大堆库文件在/usr/local/mysql/lib下面,则可以在.bashrc或.bash_profile或shell里加入以下语句即可:
export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH  

采用第3种方法解决一下:

[root@localhost ~]#export LD_LIBRARY_PATH=/home/work/ABCDEFG/lib/:$LD_LIBRARY_PATH 

http://www.ppmy.cn/news/1096673.html

相关文章

每日刷题-3

目录 一、选择题 二、编程题 1、计算糖果 2、进制转换 一、选择题 1、 解析:在C语言中,以0开头的整数常量是八进制的,而不是十进制的。所以,0123的八进制表示相当于83的十进制表示,而123的十进制表示不变。printf函数…

Windows系统的桌面显示信息工具___BGInfo使用

一、BGInfo简介 BGInfo(桌面显示信息工具)是微软开发的用于在Windows系统中实现将Windows系统信息【如:当前用户名、CPU、操作系统版本、IP地址、硬盘等】或自定的内容显示在桌面壁纸上的操作工具,用户可以根据自己的需要定制属于自己的桌面内容(特别是对应企业来说通过域…

苏宁API接口解析,实现获得suning商品详情

要解析苏宁API接口并实现获取苏宁商品详情,你需要按照以下步骤进行操作: 了解苏宁开放平台:访问苏宁开放平台官网,找到API接口相关的开发者文档、指南等信息。注册开发者账号:在苏宁开放平台上注册一个开发者账号&…

it监控系统可以电脑吗?有什么效果

IT业务监控已经成为公司不可或缺的一部分,以确保业务的正常运行,提高企业的竞争能力。本文将详细介绍IT业务监控的必要性、实施方法以及如何选择合适的监控工具。 IT业务监控的必要性 确保业务稳定运行  IT业务监控可以实时检测公司的工作流程&#x…

【我的第一千篇文章】

作为一名Java开发者,我很自豪地宣布,这里是我输出的第一千篇文章。在过去的六年里,我一直坚持每月输出优质内容,并将其分享给了全世界的读者们。这一千篇文章中,有很多关于Java编程的技巧、经验分享、优秀实践示例、案…

Ubuntu下通过python使用MySQL

参考资料 MySQL Connector/Python Developer Guide 环境 Ubuntu 20.04Python 3.8.10MySQL Server 8.0.34mysql-connector-python 8.1.0 安装MySQL pip install mysql-connector-python # 注意,不要安装成 mysql-connector 了环境测试 注意: 千万不能…

简明SQL别名指南:掌握AS实现列名更名

在 SQL 查询中,使用 {原始字段名} as {别名} 的语法来为查询结果的列赋予更直观的名称,以提高查询结果的可读性和可理解性。 以下是用到的表。 用AS更名 例如,查询表1的name字段,并将其更名为"名字",同时查…

ERROR: your rosdep installation has not been initialized yet

这个错误表示你的 rosdep 还没有初始化。rosdep 是一个 ROS 中的系统依赖管理工具,用于安装和配置需要的系统依赖包。在使用 rosdep 之前,需要先通过 rosdep update 命令初始化它。这个命令会连接远程服务器来更新 rosdep 的数据源,以获取所有支持的 ROS 版本和平台的依赖信息。…