解决Linux可执行文件目录下明明存在*.so文件,但却提示找不到

 更新时间:2023年11月24日 11:08:46   作者:有梦想的伟仔  
这篇文章主要介绍了解决Linux可执行文件目录下明明存在*.so文件,但却提示找不到问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

加载机制的问题

在Linux上,动态库的加载机制和在Windows上完全不一样

其实应该叫做【共享库】才对,动态库是Windows的概念,Windows上为*.dll,Linux上为*.so。

  • dll:dynamic link library,即:动态链接库。
  • so:share object(library),即:共享库。

1、在Windows上

一个可执行程序会先在当前目录下找需要的动态库(*.dll)文件,如果当前目录下有,则加载。

如果当前目录没有,才会去系统的环境变量目录下去找,如果找到了,则加载,如果连环境变量中都找不到,将报错。

2、在Linux上

一个可执行程序会直接去 “环境变量目录下” 找共享库(*.so),如果找不到,则报错。

“环境变量目录下” 打了引号,因为这更像是一个专门用于【共享库】的环境变量,Linux的环境变量应该是PATH(可在终端输入这个查看:echo $PATH),PATH跟Windows上的环境变量又不一样,PATH描述的是Linux命令的一个路径,而Windows上的环境变量描述的是命令 + 库。

Linux的库的加载,由 /etc/ld.so.conf 和 /etc/ld.so.conf.d/*.conf 来进行加载的,不妨一个一个打开看看就一切都明白了。

3、解决问题

(其实如果2中打开看了 /etc/ld.so.conf 和 /etc/ld.so.conf.d/*.conf就已经懂了,无论看没看,想直接解决问题,请看一下操作)

①将.so文件路径的目录添加到/etc/ld.so.conf

sudo vim /etc/ld.so.conf

方法1:在文件末行,添加自己的库的路径。

方法2:将自己的库,复制到ld.so.conf文件中的其中一个路径下(如:/usr/lib 或 /usr/local/lib。推荐/usr/local/lib,能够避免受到Linux升级的影响)。

②让①中的修改生效

sudo /sbin/ldconfig

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Linux系统中安装gcc和kernel-devel的方法

    Linux系统中安装gcc和kernel-devel的方法

    下面小编就为大家带来一篇Linux系统中安装gcc和kernel-devel的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 详解CentOS 7.0源码包搭建LNMP 实际环境搭建

    详解CentOS 7.0源码包搭建LNMP 实际环境搭建

    本篇文章主要介绍了Centos7+Nginx1.11.7+MySQL5.7.16+PHP7.1.0+openssl-1.1.0c,具有一定的参考价值,有兴趣的可以了解一下。
    2016-12-12
  • 在Linux中使用iptables设置端口转发的步骤

    在Linux中使用iptables设置端口转发的步骤

    在Linux系统中,iptables是一个非常强大的防火墙工具,用于管理网络数据包的过滤和转发,它允许系统管理员根据特定的规则来控制数据包的流动,本文给大家介绍了如何在 Linux 中使用 iptables 设置端口转发,需要的朋友可以参考下
    2024-05-05
  • Linux搭建Docker环境全过程

    Linux搭建Docker环境全过程

    这篇文章主要介绍了Linux搭建Docker环境全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 实现一台或者多台Linux实例解绑SSH密钥对

    实现一台或者多台Linux实例解绑SSH密钥对

    在本篇文章中我们给大家分享了一篇如何为一台或者多台 Linux 实例解绑 SSH 密钥对的相关内容,有兴趣的朋友们学习下。
    2018-10-10
  • YUM软件包管理工具与yum命令的详细介绍

    YUM软件包管理工具与yum命令的详细介绍

    yum是基于RPM包管理器、为了提高RPM软件包安装性而开发的一种软件包管理器。它能够从指定的服务器自动下载.rpm包并自动安装,可以自动处理依赖性关系,并一次性安装所有依赖的软体包。本文就详细介绍了YUM软件包管理工具与yum命令。有需要的朋友们下面来一起看看吧。
    2017-01-01
  • 详解Linux文件中的数据是如何被写进磁盘

    详解Linux文件中的数据是如何被写进磁盘

    Linux 中,我们的每一个进程,打开的每一个文件都要有自己的 struct inode 对象和自己的文件页缓冲区(就是所谓的内核缓冲区),本文我们给大家介绍了Linux文件中的数据是如何被写进磁盘,需要的朋友可以参考下
    2024-05-05
  • CentOS7上以rpm方式安装JDK8

    CentOS7上以rpm方式安装JDK8

    这篇文章主要介绍了CentOS7上以rpm方式安装JDK8,需要的朋友可以参考下
    2020-02-02
  • Linux体检,了解你的Linux状态(网络IO,磁盘,CPU,内存)

    Linux体检,了解你的Linux状态(网络IO,磁盘,CPU,内存)

    这篇文章主要介绍了为Linux做个检查,了解你的Linux的状态,学会查看linux各种状态,包括:网络IO、磁盘、CPU、内存等; 学会理解命令所代表的含义,能够迅速发现集群存在的问题
    2021-08-08
  • 浅谈Linux配置定时,使用crontab -e与直接编辑/etc/crontab的区别

    浅谈Linux配置定时,使用crontab -e与直接编辑/etc/crontab的区别

    下面小编就为大家带来一篇浅谈Linux配置定时,使用crontab -e与直接编辑/etc/crontab的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11

最新评论