解决Linux中cannot-open-shared-object-file-No-such-file-or-directory

Posted by AlstonWilliams on February 17, 2019

在一个C项目中,我们需要解析配置文件,然后选用了libconfuse库.从源码编译安装之后,照着官网的例子,写了一个测试程序,却不能成功运行,老是出现如题所示的错误.

开始是找不到函数的定义,于是链接了一下外部库,解决: gcc -o TestConfuse TestConfuse.c /usr/local/lib/libconfuse.a

然后就是cannot open shared object file: No such file or directory了,通过执行sudo ldconfig命令解决.

ldconfig是一个用于管理Share Library Cache的工具.这些缓存一般保存在/etc/ld.so.cache中.这些缓存被系统用于映射库名称和其位置的关系.这个映射关系,会在共享库需要被动态链接到程序中时,被用到.默认情况下,共享库都放在/lib,/usr/lib中.

那么,如果我们将共享库安装到/usr/local/lib中,在我们需要用到这个共享库时,就会因为从动态库缓存中,找不到它,而导致出现上面的错误.

解决方法有两个:

  • 设置LD_LIBRARY_PATH这个变量,告诉系统,我们把共享库放到了这里.
  • 重新构建Share Library Cache.通过sudo ldconfig即可进行重新构建.

在Ubuntu14.04上实验过没有问题,在其他的Linux发行版上没有尝试过.