美文网首页
LD_LIBRARY_PATH与systemctl

LD_LIBRARY_PATH与systemctl

作者: 殷临风 | 来源:发表于2017-05-18 03:22 被阅读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的配置

    相关文章

      网友评论

          本文标题:LD_LIBRARY_PATH与systemctl

          本文链接:https://www.haomeiwen.com/subject/okwjxxtx.html