LD_LIBRARY_PATH与systemctl

2017-05-18  本文已影响325人  殷临风

一般而言, 如果自己编译了.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的配置

上一篇下一篇

猜你喜欢

热点阅读