一般而言, 如果自己编译了.so
文件, 我们希望它能够像/usr/lib
或/usr/lib64
中的库一样被全局调用, 当然简单的办法是将其移到那些文件夹里面, 有时候我们不希望这些文件在一起混淆, 希望他们可以有自己的文件夹, 改如何处理
说到这里, 大家更多的是想到环境变量PATH
, 但它主要是用于可执行文件, 比如设置java
, php
命令之类到全局, 其实.so
库也有相应的环境变量LD_LIBRARY_PATH
, 默认情况, 这个变量是空值的, 所以如果想让某些文件夹中的库能够被全局调用, 那么可以将路径赋值给这个变量
假定我编译了
ice
库, 这个目录位于/opt/ice/lib64
# 打开系统配置文件, 当然也可以使用用户的
vi /etc/profile
# 在文件末尾添加
export LD_LIBRARY_PATH=: /opt/ice/lib64
# 使之生效
source /etc/profile
这个时候, 我们的ice
库可以被全局调用.
但是当我们通过
systemctl
去启动服务的时候, 比如systemctl start php-fpm
, 会发现php-fpm
服务并不会读取LD_LIBRARY_PATH
这个变量, 也就是说不会加载ice
库, 这个时候, 需要通过另一种方式
# 创建配置文件, 这里仍然以 ice 为例子
vi /etc/ld.so.conf.d/ice-x86_64.conf
# 添加内容
/opt/ice/lib64
# 以root用户的方式执行, 使之生效
ldconfig
之后重启相应的
systemctl
命令即可生效. 这里可以总结一点LD_LIBRARY_PATH
中设置的内容不会影响systemctl
命令, 需要通过ld.so.conf
的配置
网友评论