解决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

总结

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

相关文章

  • telnet nc命令返回“连接失败”问题及解决

    telnet nc命令返回“连接失败”问题及解决

    当使用nc或telnet命令测试端口连接时,如果返回“connection refused”错误,通常可能是因为:1. 目标端口未被监听,即没有服务在运行于该端口;2. 防火墙策略阻止了该端口的连接;3. 目标主机配置了只允许特定IP或子网的连接,这些情况都会导致连接尝试失败
    2024-10-10
  • keepalived实现nginx高可用

    keepalived实现nginx高可用

    这篇文章主要为大家详细介绍了keepalived实现nginx高可用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 如何在服务器上安装和配置Yasd调试器来调试Swoole项目

    如何在服务器上安装和配置Yasd调试器来调试Swoole项目

    本文详细介绍了如何在服务器上安装和配置Yasd调试器来调试Swoole项目,以及如何在本地使用PHPStorm进行调试,整个过程包括安装必要的依赖、配置PHP和Swoole、设置SSH隧道以及在本地IDE中进行调试
    2025-12-12
  • Linux gdb多进程、多线程调试过程

    Linux gdb多进程、多线程调试过程

    本文总结GDB在Linux下的调试方法,涵盖基本命令、堆栈分析、多进程与多线程调试设置,如断点、跟踪、切换进程线程,以及调试步骤与参数配置
    2025-07-07
  • CentOS 7.2部署邮件服务器(Postfix)

    CentOS 7.2部署邮件服务器(Postfix)

    这篇文章主要为大家详细介绍了CentOS 7.2如何部署邮件服务器Postfix,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Linux启动与停止spring boot工程的脚本示例

    Linux启动与停止spring boot工程的脚本示例

    这篇文章主要给大家介绍了关于Linux启动与停止spring boot工程的脚本的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Linux中设置SSH免密码(密钥)登录的具体步骤

    Linux中设置SSH免密码(密钥)登录的具体步骤

    SSH是一种加密的网络协议,广泛用于远程管理服务器和安全传输文件,通常在使用SSH时需要输入密码进行验证,但通过配置免密登录,我们可以省去每次输入密码的麻烦,所以本文给大家介绍了Linux中设置SSH免密码(密钥)登录的具体步骤,需要的朋友可以参考下
    2025-07-07
  • Linux paste命令的使用方法

    Linux paste命令的使用方法

    这篇文章主要介绍了Linux paste命令的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 在 Apache 中创建单个文件的别名的操作方法

    在 Apache 中创建单个文件的别名的操作方法

    要创建 Apache 中的单个文件的别名,您可以在 Apache 配置文件中使用 Alias 指令,Alias 指令允许您将 URL 路径映射到文件系统位置,该路径可以是目录或单个文件,本文介绍如何在 Apache 中创建单个文件的别名,感兴趣的朋友一起看看吧
    2024-12-12
  • linux中的静态IP配置方式

    linux中的静态IP配置方式

    这篇文章主要介绍了linux中的静态IP配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05

最新评论