Linux程序运行时加载动态库失败的解决方法

Linux下不能加载动态库问题

当出现下边异常情况

./test: error while loading shared libraries: libmfs_open.so: cannot open shared object file: No such file or directory

若动态库的路径在(/usr/cluster/.share/lib)

解决办法:

方法一、在/etc/ld.so.conf文件中添加路径,vi /etc/ld.so.conf

添加下边内容

include ld.so.conf.d/*.conf

/usr/cluster/.share/lib

方法二、在终端输入:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/cluster/.share/lib

方法三、修改/etc/profile文件

export MPI_HOME=/usr/cluster

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MPI_HOME/.share/lib

在终端执行source /etc/profile 使配置文件生效

程序运行时加载动态库失败的解决方法

错误提示如下:

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

原因一般有两个,一个是操作系统中没有包含该共享库(lib*.so.* 文件)或者共享库版本不对。解决办法就是重新下载安装。

另外一个原因就是已经安装了该共享库,但是执行需要调用该共享库的程序的时候,程序按照默认共享库路径找不到该共享库文件。解决方法如下:

如果共享库文件安装到了 /lib 或 /usr/lib 目录下,那么执行一下 ldconfig 命令。

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

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

# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig

或者在 /etc/ld.so.conf.d/ 目录下新建任何以 .conf 为后缀的文件,在该文件中加入库文件所在的目录。然后执行 ldconfig 更新 /etc/ld.so.cache 文件。

如果共享库文件安装到了其他非 /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

一般来讲这只是一种临时的解决方案, 在没有权限或临时需要的时候使用.

如果程序需要的库文件比系统目前存在的库文件版本低,可以做一个链接。比如:

error while loading shared libraries: libncurses.so.4: cannot open shared
object file: No such file or directory
ls /usr/lib/libncu*
/usr/lib/libncurses.a  /usr/lib/libncurses.so.5
/usr/lib/libncurses.so /usr/lib/libncurses.so.5.3

可见虽然没有libncurses.so.4,但有libncurses.so.5,是可以向下兼容的

建一个链接就好了

ln -s /usr/lib/libncurses.so.5.3 /usr/lib/libncurses.so.4

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • 查看远程 Linux 系统中某个端口是否开启的三种方法

    这是一个很重要的话题,不仅对 Linux 管理员而言,对于我们大家而言也非常有帮助.我的意思是说对于工作在 IT 基础设施行业的用户来说,了解这个话题也是非常有用的.他们需要在执行下一步操作前,检查 Linux 服务器上某个端口是否开启. 假如这个端口没有被开启,则他们会直接找 Linux 管理员去开启它.如果这个端口已经开启了,则我们需要和应用团队来商量下一步要做的事. 在本篇文章中,我们将向你展示如何检查某个端口是否开启的 3 种方法. 这个目标可以使用下面的 Linux 命令来达成: nc

  • Linux 命令查询小程序中的 WePY 云开发实践

    大家好,今天我来为大家分享一下, Linux 命令查询小程序中的 WePY 云开发实践. Why WePY 首先,先分享一下为什么要选择 WePY ? 在项目开始进行选型的时候,我可选的底层框架有 WePy.MPVue.Taro.MinUI,这些框架都是工程化做得很好的框架,可以帮助小程序项目长期进行维护.其中,Taro 因为采用的是我所不熟悉的 React ,所以从一开始就被排除.MPVue 我看了以后,它更多是给 Web 开发者提供小程序转化工具,而不是给小程序开发者提供类 Vue 工具,所

  • 在 Linux 中不使用 CD 命令进入目录/文件夹的方法

    众所周知,如果没有 cd 命令,我们无法 Linux 中切换目录.这个没错,但我们有一个名为 shopt 的 Linux 内置命令能帮助我们解决这个问题. shopt 是一个 shell 内置命令,用于设置和取消设置各种 bash shell 选项,由于它已安装,因此我们不需要再次安装它. 是的,我们可以在启用此选项后,可以不使用 cd 命令切换目录. 我们将在本文中向你展示如何操作.这是一个小的调整,但对于那些从 Windows 迁移到 Linux 的新手来说非常有用. 这对 Linux 管理

  • Linux常见英文报错中文翻译(菜鸟必知)

    1.command not found 命令没有找到 2.No such file or directory 没有这个文件或目录 3.Permission denied 权限不足 4.No space left on device 磁盘没有剩余空间 5.File exists 文件已经存在 6.Is a directory 这是1个目录 7.Not a directory 不是1个目录 8.Warning: Changing a readonly file 警告:改变一个只读文件 9.Found

  • 详解Linux安装教程

    (Win7系统)VMware虚拟机安装教程 VMware是虚拟机普遍使用的的一款软件,该软件方便实用,但想必有很多新接触的新手还是很陌生的,小编在这里就简要的来介绍一下安装过程以及遇到的问题,下面我们一起来看看吧. 工具:①VMware ②win7镜像文件(可在百度下载) 步骤: 1.首先,我们打开VMware软件,进去虚拟机首页,如下图所示: 2.点击创建新的虚拟机,进入新建虚拟机界面,会有典型和自定义高级选项,默认选项是典型,我们保持默认选项,点击下一步: 3.点击下一步后会进入新建安装虚拟

  • linux环境不使用hadoop安装单机版spark的方法

    大数据持续升温, 不熟悉几个大数据组件, 连装逼的口头禅都没有. 最起码, 你要会说个hadoop, hdfs, mapreduce, yarn, kafka, spark, zookeeper, neo4j吧, 这些都是装逼的必备技能. 关于spark的详细介绍, 网上一大堆, 搜搜便是, 下面, 我们来说单机版的spark的安装和简要使用. 0.  安装jdk,  由于我的机器上之前已经有了jdk, 所以这一步我可以省掉. jdk已经是很俗气的老生常谈了, 不多说, 用java/scala的

  • Linux下Tomcat的几种运行方式讲解

    Linux下Tomcat的启动.关闭 在Linux系统下,启动和关闭Tomcat使用命令操作. 进入Tomcat下的bin目录 cd /java/tomcat/bin 启动Tomcat命令 ./startup.sh 停止Tomcat服务命令 ./shutdown.sh 执行tomcat ./shutdown.sh 后,虽然tomcat服务不能正常访问了,但是ps -ef | grep tomcat 后,发现tomcat对应的java进程未随web容器关闭而销毁,进而存在僵尸java进程.网上看了

  • linux中chmod命令用法详解

    chmod命令语法 这是使用chmod命令时的正确语法: chmod [options] mode [,mode] file1 [file2 ...] 以下是chmod使用的一些常用选项: ● -f, - silent, - quiet(抑制大多数错误消息) ● -v, - verbose(为每个处理的文件输出诊断信息) ● -c, - changes(类似于详细但仅在进行更改时报告) ● -R, - recursive(递归更改文件和目录) ● --help(显示帮助和退出) ● --vers

  • linux下搭建scala环境并写个简单的scala程序

    在linux下安装scala环境很简单, 如果是ubuntu环境, 那就更简单了, 直接apt-get搞定, 我就是用的ubuntu.  java/scala系都需要基于jdk, 所以首先要安装jdk. 1.  安装jdk, 老生常谈, 不值得一说. 2.  安装scala, 如下: sudo apt-get install scala 如下: ubuntu@VM-0-15-ubuntu:~/taoge/scala$ scala -version Scala code runner versio

  • Linux下源码包安装Swoole及基本使用操作图文详解

    本文实例讲述了Linux下源码包安装Swoole及基本使用操作.分享给大家供大家参考,具体如下: 下载Swoole PECL扩展源码包:http://pecl.php.net/package/swoole 关于PHP版本依赖选择: 下载好放到/usr/local/src下,解压缩: tar -zxvf swoole-2.2.0.tgz 准备扩展安装编译环境: phpize 查看php-config位置: find / -name php-config 配置:(--with-php-config=

随机推荐