现在的位置: 首页 > Linux > 正文

Linux程序部署无法加载SO文件问题解决方案

2012年10月25日 Linux ⁄ 共 670字 ⁄ 字号 暂无评论 ⁄ 阅读 4,948 次

本文主要介绍Linux系统上程序部署时,无法加载SO文件问题解决方案(作者:李栓鹏)。

Linux程序安装部署运行方式与我们熟知的Windows程序有很大的不同:

在Windows上,一般EXE程序加载DLL的路径顺序是:首先是当前路径,然后是系统配置的PATH环境变量

在Linux上,可执行程序加载动态库SO文件的路径顺序是:系统配置的LD_LIBRARY_PATH路径。(当前路径不在加载SO的路径上)

也就是说,如果在Linux上将程序部署在非标准路径上,程序如果需要加载自己实现的SO文件,会找不到SO文件,即使SO文件和程序在同一个目录。

在开发层面,即使使用dlopen手动加载SO文件,除非使用绝对路径,否则也不能打开

可以使用ldd命令查看当前程序所需要加载的SO是否都能找到:ldd  ./程序名

解决Linux部署出现上述问题的方案有两种:

第一种:将程序按照标准方式部署安装

第二种:配置当前LD_LIBRARY_PATH,将当前路径加入到LD_LIBRARY_PATH

对于第二种方案,这里给出一个一劳永逸的方案,达到与Windows下相同的效果:

修改配置文件,如果只想改当前用户,则修改 ~/bashrc或~/bash_profile,如果想修改整个系统则修改/etc/profile 建议修改当前用户配置文件

这里以修改当前用户的配置为例:

在配置文件中新增两行(如果只想将某个路径加入,修改./为希望加入的路径)

LD_LIBRARY_PATH=./

export  LD_LIBRARY_PATH

修改完成之后保存文件,注销当前用户重新登录即可