全局加载.so文件

一般而言, 如果自己编译了.so文件, 我们希望它能够像/usr/lib/usr/lib64中的库一样被全局调用, 当然简单的办法是将其移到那些文件夹里面, 有时候我们不希望这些文件在一起混淆, 希望他们可以有自己的文件夹

说到这里, 大家更多的是想到环境变量PATH, 但它主要是用于可执行文件, 比如设置java, php可全局执行. 其实.so库也有相应的环境变量LD_LIBRARY_PATH, 默认情况, 这个变量是空值, 所以可以将so文件的目录设置到这个变量中

假定我编译了ice.so文件, 目录位于 /opt/ice/lib64

# 打开系统配置文件, 当然也可以使用用户的
vi /etc/profile

# 在文件末尾添加
export LD_LIBRARY_PATH=:/opt/ice/lib64

# 使之生效
source /etc/profile

这个时候, 我们的ice.so库可以被全局调用.

但是当我们通过systemctl去启动服务的时候, 比如systemctl start php-fpm, 会发现php-fpm服务并不会读取LD_LIBRARY_PATH这个变量, 也就是说不会加载ice.so库, 那么需要做如下配置

# 创建配置文件, 这里仍然以 ice 为例子
vi /etc/ld.so.conf.d/ice-x86_64.conf

# 添加内容
/opt/ice/lib64

# 以root用户的方式执行, 使之生效
ldconfig

重启相应的systemd服务即可生效. 这里可以总结一点LD_LIBRARY_PATH中设置的内容不会影响systemctl命令, 需要通过ld.so.conf的配置

展示评论