千家信息网

Linux程序运行时加载动态库失败怎么办

发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,这篇文章主要介绍了Linux程序运行时加载动态库失败怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是Linux系统Linux
千家信息网最后更新 2025年02月08日Linux程序运行时加载动态库失败怎么办

这篇文章主要介绍了Linux程序运行时加载动态库失败怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

什么是Linux系统

Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统,使用Linux能运行主要的Unix工具软件、应用程序和网络协议。

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/clusterexport 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.confinclude 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 sharedobject file: No such file or directoryls /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

感谢你能够认真阅读完这篇文章,希望小编分享的"Linux程序运行时加载动态库失败怎么办"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

目录 文件 程序 动态 库文件 运行 方法 系统 路径 篇文章 链接 操作系统 命令 时候 配置 怎么办 办法 原因 就是 权限 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 vb连接sql数据库代码 如何实现两个服务器文件同步 视频聊天软件开发的大品牌 方舟灭绝服务器密封舱怎么做 macos软件开发国际化 EDB数据库崩溃 2019全国网络安全宣传 铜陵在线教育平台软件开发 用友财务数据库类型 变声软件开发流程 北京综合软件开发服务价格 数据库数值字段存字符串 汕头地产软件开发电话 gt7无法与服务器 潍坊雷讯互联网络科技 数据库数据修改如何做到安全问题 互联网信息网络安全发展现状 理光扫描仪服务器响应错误 网络技术应用中心 重庆电商软件开发大概要多少钱 网络安全后门和右击病毒 海口专业的进销存软件开发 深圳虚拟都市网络技术 软件开发的复杂性是 搭建代理服务器 数据库备份 oracle 侠盗猎车手罪恶都市多人服务器 卡通农场和安卓服务器互通吗 数据库数据修改如何做到安全问题 思派网络安全手抄报
0