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

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

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

时间: 2024-11-05 18:38:04

记一起动态库加载错误问题排查过程的相关文章

Linux程序动态库加载优化

作者:zhanhailiang 日期:2014-10-26 linux程序动态库加载流程简介 linux从程序(program或对象)变成进程(process或进程),简单说来需要经过三步: fork进程,在内核创建进程相关内核项,加载进程可执行文件: 查找依赖的.so,逐一加载映射虚拟地址: 初始化程序变量: 如下例通过strace查看pwd命令执行过程: [root@~/wade/codeReview/learningc]# strace pwd execve("/bin/pwd"

linux和windows动态库加载路径区别

# linux和windows动态库加载路径区别 ### 简介------------------------------ linux加载动态库的路径是系统目录/lib和/usr/lib.- windows加载动态库的路径是本地目录下,然后再搜索windows/system和windows/system32目录 ### 备注------------------------------ linux加载动态库的路径方式,对于习惯windows开发的开发者是不太方便的.- 其实linux下可以设置从当

linux动态库加载的秘密

摘自http://gotowqj.iteye.com/blog/1926734 摘自http://www.360doc.com/content/14/0313/13/12747488_360246417.shtml linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名.二者都使用广泛.本文主要讲动态库方面知识. 基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看 # ldd /bin/ls linux-vdso.so.1 =

linux下添加动态链接库路径、动态库加载等方法

linux下添加动态链接库路径的方法 2017年01月20日 10:08:17 阅读数:5596 Linux共享库路径配置 Linux下找不到共享库文件的典型现象为明明已经安装某个软包(如libnet,MySQL),编译连接可以正常进行,但是在运行时出现如"error while loading shared libraries: libnet.so.1:cannot open shared object file :No such file or directory"的错误提示. 原

ios 动态库加载及某个文件非ARC问题

build setting里的header search paths里增加动态库头文件的搜索路径如 /usr/include/libxml2 还要在other linker flags里增加 -lxml2 如果某个文件是非ARC,则在build phases里的compile sources里找到对应的文件增加-fno-objc-arc

动态库加载配置

cannot open shared object file: No such file or directory解决 ./move_db: error while loading shared libraries: libmysqlclient.so.15: cannot open shared object file: No such file or directory 第一步:确认有哪些Lib无法Load >ldd move_db linux-gate.so.1 => (0x0089c0

pyqt5-数据库加载错误解决

1.无法连接postgresql 直接在pycharm上安装pyqt5没有QT这个文件夹, 在ancanda中装好使用. 切换加载环境,或者将第二个ptqt5拷贝替换第一个环境中的pyqt5 原文地址:https://www.cnblogs.com/icat-510/p/10177889.html

AutoSharedLibrary -- 基于模板元编程技术的跨平台C++动态链接加载库

基于模板元编程技术的跨平台C++动态链接加载库.通过模板技术,使用者仅需通过简单的宏,即可使编译器在编译期自动生成加载动态链接库导出符号的代码,无任何额外的运行时开销. ASL_LIBRARY_BEGIN(TestLib) ASL_SYMBOL(Proc_test1, test1, false) ASL_SYMBOL(Proc_test2, test2, true) ASL_LIBRARY_END() TestLib theLib; try { theLib.Load("./1.so"

Silverlight项目笔记7:xml/json数据解析、MVVM下实现多级树形结构TreeView、忽视引用类型导致数据绑定错误、通过流或动态空间加载图片、虚拟目录设置、silverlight安全机制引发的问题、WebClient缓存问题

涉及的内容主要有: 1.xml/json数据解析 2.多级树形结构TreeView 3.忽视引用类型导致数据绑定错误 4.通过流或动态空间加载图片 5.虚拟目录设置 6.silverlight安全机制引发的问题 7.webclient缓存问题 1.xml/json数据解析 (1)xml数据解析 使用WebClient获取数据,获取到的数据实例化为一个XDocument,使用XDocument的Descendants(XName)方法获得对应节点的数据集合,再通过Element这个方法对数据集合进