• 记一起动态库加载错误问题排查过程


    我们的服务器软件在一台新机器上启动的时候报错:

    error while loading shared libraries: libtcmalloc_mininal.so.4 No such file or directory

    1,首先找找动态库libtcmalloc是否在新机器上

    libtcmalloc这个动态库在目录/usr/local/lib下面,再查看/etc/ld.so.conf/gperftools.conf,它已经把目录/usr/local/lib加入到动态库搜索路径中了,为什么还会找不到动态库的错误呢?手动将/usr/local/lib加入到环境变量LD_LIBRARY_PATH中,然后再启动服务器软件,依然报上面的错误。

    2,用ldd查看可执行文件的动态链接信息

    ldd /usr/bin/xxx
          ...
          libtcmalloc_minimal.so.4 => /usr/local/lib/libtcmalloc_minimal.so.4 (0x00007f502b0b9000)
          ...
    

     可以看到是可以找到动态链接库的。

    3,因为可执行文件xxx在打包的时候依赖可gperftools,所以有可能是安装xxx的时候没有建立与gperftools的依赖关系。

    这种情况下,只能手动卸载gperftools和xxx,然后安装xxx,让xxx自动按照依赖安装gperftoos。

    4,卸载xxx成功,然后用yum卸载gperftools的时候,显示gperftools已经卸载成功,但是用rpm -ql gperftools依然能看到gperftools在系统中。猜测gperftools不是用yum安装的,遂用rpm -e gperftools卸载,这时报错:

     hwcap index 0 already defined as nosegneg
    

     在http://blog.chinaunix.net/uid-24830931-id-3467340.html 这里有个解决方法,作者提到ldconfig的时候也遇到过这样的问题

    5,查看我机器上面的配置 /etc/ld.so.conf.d/*.conf中的一些内核配置,的确发现有的配置是hwcap 0 nosegneg,另外一些的配置是hwcap 1 nosegneg。

    将这些配置改成一致的hwcap 1 nosegneg。

    6,然后再用rpm -e gperftools卸载gperftools。

    7,用yum安装服务器软件,它会自动安装依赖的gperftools。

    8,启动服务器软件,成功。

  • 相关阅读:
    正则表达式
    http协议组成(请求状态码)
    谈一谈你对js线程的理解
    CSS 中定位方式有几种,说明他们的意义
    手机端白屏前端优化的方法,5 种以上
    用 js 写一个获取随机颜色的程序
    如何获取本地存储信息
    cuda 版本查阅
    ubuntu16.04 ROS安转及RVIZ启动
    Tensorflow和Caffe 简介
  • 原文地址:https://www.cnblogs.com/cobbliu/p/4165901.html
Copyright © 2020-2023  润新知