Linux运行程序找不到.so依赖库解决方法
如果依赖库路径是正确的,库也是没问题的,找不到的原因,是因为Linux下需要设置环境变量,来添加库的查找路径;LD_LIBRARY_PATH: 动态库的查找路径设置:方法一: export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/XXX 但是退出当前终端后就失效方法二: 修改~/.bashrc或~/.bash_profile或系统级别的/etc/profile1. 在其中
如果依赖库路径是正确的,库也是没问题的,找不到的原因,是因为Linux下需要设置环境变量,来添加库的查找路径;
LD_LIBRARY_PATH: 动态库的查找路径
设置:
方法一: export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/XXX 但是退出当前终端后就失效
方法二: 修改~/.bashrc或~/.bash_profile或系统级别的/etc/profile
1. 在其中添加例如export LD_LIBRARY_PATH=/opt/ActiveP/lib:$LD_LIBRARY_PATH
2. source .bashrc (Source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录)
方法三:这个没有修改LD_LIBRARY_PATH但是效果是一样的实现动态库的查找,
1. /etc/ld.so.conf下面加一行/usr/local/mysql/lib
2. 保存后执行 ldconfig 生效
(ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.)
方法三设置稍微麻烦,好处是比较不受用户的限制。
但是这样会遇到一个问题,就是发布程序的时候,不可能每次都在新机器上配置环境,那我建议写一个shell脚本,获取当前执行程序路径,并设置动态库路径为此路径,那想要执行程序,直接执行脚本即可。
附上脚本:
#!/bin/bash
#获取当前执行程序路径
SOURCE="$0"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
SOURCE="$(readlink "$SOURCE")"
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
#设置环境变量为当前路径
export LD_LIBRARY_PATH=${DIR}:$LD_LIBRARY_PATH
#执行程序,我这里test1,按你程序名称改
./test1
更多推荐
所有评论(0)