注册

Linux报 “shared library not found” 异常的原因以及解决办法

当在Linux系统上运行程序时,可能会遇到"shared library not found"的错误。这个错误通常指的是程序需要依赖的动态共享库没有被正确的安装或设置。以下是可能导致这个错误的原因以及如何解决它的方法。

原因

  1. 动态共享库没有被正确安装:程序需要的某些共享库没有在系统中安装或者安装的位置与程序预期的默认安装路径不同,导致程序无法在运行时加载这些共享库。

  2. 环境变量未正确设置:程序需要的一些在运行时加载的共享库所在路径在环境变量中没有被正确设置,导致程序无法找到这些共享库。

解决办法

  1. 安装缺失的共享库:首先需要找到程序依赖的共享库名称,一般会在程序提示的错误信息中显示。然后尝试用系统的包管理工具安装缺失的共享库。例如,在Ubuntu系统上可以使用以下命令安装缺失的共享库:
sudo apt-get install lib库名
  1. 添加共享库搜索路径:如果共享库已经安装,但程序仍然无法找到它,那么需要把共享库所在路径添加到LD_LIBRARY_PATH环境变量中,这样程序在运行时会优先搜索这些路径下的共享库。例如,如果需要添加/usr/local/lib这个路径,可以使用以下命令:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
  1. 编译时指定共享库路径:如果程序需要依赖的共享库路径不在默认路径中,或者需要使用不同版本的共享库,可以在编译时手动指定共享库的路径。例如,使用gcc编译test.c文件依赖libtest.so共享库,可以使用以下命令:
gcc -o test test.c -L/path/to/lib -ltest

其中-L指定共享库所在的路径,-l指定需要依赖的共享库。

总之,在解决“shared library not found”问题时,需要先找到缺失的共享库名称,然后确定缺失共享库的原因,然后采取相应的解决办法,例如安装缺失的共享库、添加共享库搜索路径、编译时手动指定共享库路径等。