zoukankan      html  css  js  c++  java
  • 记一起动态库加载错误问题排查过程

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

    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,启动服务器软件,成功。

  • 相关阅读:
    C# 类与类的关系(2)
    如何成为一个优秀的程序员?
    设计模式详细系列教程 (二) 创建型模式
    UML系列 (四) 实战机房收费系统
    UML系列 (三) 四种关系
    HDU 4003 Find Metal Mineral(树形DP+分组背包)
    从零开始的acm竞赛生涯
    2016 ACMICPC ECFinal题解整理
    第四章 复杂选择结构
    第五章 循环结构
  • 原文地址:https://www.cnblogs.com/cobbliu/p/4165901.html
Copyright © 2011-2022 走看看