前言

“error while loading shared libraries: libcjson.so.1: cannot open shared object file: No such file or directory”指找不到共享库,下面分析一下错误原因及其解决办法。


一、错误原因

错误原因一般有两种:

  1. 操作系统里没有包含共享库或者共享库版本不对
  2. 共享库已经安装,但是在调用的时候,程序按照默认共享库路径找不到该共享库

二、解决办法

1.操作系统里没有包含共享库或者共享库版本不对

——这个只需要安装对应的共享库即可。

2.共享库已安装,但是默认搜索路径找不到

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

    ldconfig 命令的用途是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.。通常在系统启动时会执行命令ldconfig。当用户安装了一个新的动态链接库时,就需要手动运行lfconfig命令

  2. 如果共享库文件安装到了/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
  1. 如果不想在/etc/ld.so.conf中加路径或者是没有权限的, 则可以export一个全局变量LD_LIBRARY_PATH, 然后运行程序的时候就会去这个目录中找共享库
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/kongsiyu/rpimonitor/cjson/cJSON-1.7.14
  • LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径
  • LD_LIBRARY_PATH环境变量用于在程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径,注意,LD_LIBRARY_PATH中指定的路径会在系统默认路径之前进行查找。
  • 通常,开发时,设置LIBRARY_PATH,以便gcc能够找到编译时需要的动态链接库。发布时,设置LD_LIBRARY_PATH,以便程序加载运行时能够自动找到需要的动态链接库。

总结

在使用共享库的时候,最好export一个全局变量LD_LIBRARY_PATH,指定该共享库的文件路径。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210507163015345.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0OTkxMTU5,size_16,color_FFFFFF,t_7

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐