文档章节

动态库链接问题

MacroLiu
 MacroLiu
发布于 2017/05/05 10:29
字数 663
阅读 109
收藏 0

运行程序时经常会出现如下错误:

./SdpUTTest: error while loading shared libraries: libunwind.so.7: cannot open shared object file: No such file or directory

运行ldd SdpUTTest

./SdpUTTest: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /opt/WindRiver6/6.0-rsys-cpm/sysroots/x86_64-wrs-linux/usr/lib64/libstdc++.so.6)
	linux-vdso.so.1 =>  (0x00007fff6f4e8000)
	libssl.so.1.0.0 => /opt/WindRiver6/6.0-rsys-cpm/sysroots/x86_64-wrs-linux/usr/lib64/libssl.so.1.0.0 (0x00007f28806e0000)
	libcrypto.so.1.0.0 => /usr/lib64/libcrypto.so.1.0.0 (0x0000003398a00000)
	libtcmalloc.so.4 => /home/macro.liu/UAG-A-R_4_5_21_4/wrlinux_6_0_x86_64/vendor/tcmalloc/gperftools/.libs/libtcmalloc.so.4 (0x00007f2880456000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003392200000)
	libprofiler.so.0 => /home/macro.liu/UAG-A-R_4_5_21_4/wrlinux_6_0_x86_64/vendor/tcmalloc/gperftools/.libs/libprofiler.so.0 (0x00007f2880242000)
	libunwind.so.7 => not found
	libdl.so.2 => /lib64/libdl.so.2 (0x0000003391a00000)
	libz.so.1 => /lib64/libz.so.1 (0x0000003392600000)
	libstdc++.so.6 => /opt/WindRiver6/6.0-rsys-cpm/sysroots/x86_64-wrs-linux/usr/lib64/libstdc++.so.6 (0x00007f287ff3d000)
	libm.so.6 => /lib64/libm.so.6 (0x0000003392a00000)
	libc.so.6 => /lib64/libc.so.6 (0x0000003391e00000)
	/lib64/ld-linux-x86-64.so.2 (0x0000003391600000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003394600000)
	libunwind.so.7 => /home/build/UAG-A-R_4_5_21_4/wrlinux_6_0_x86_64/vendor/tcmalloc/libunwind/src/.libs/libunwind.so.7 (0x00007f287fd22000)

这个是说运行程序找不到动态库

解决常用方法如下:

1) 如果共享库文件安装到了/lib或/usr/lib目录下, 那么需执行一下ldconfig命令

ldconfig是一个动态链接库管理命令,其目的为了让动态链接库为系统所共享, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表. 

2) 如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中, 如下:

# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig

3) 如果共享库文件安装到了其它"非/lib或/usr/lib" 目录下,  但是又不想在/etc/ld.so.conf中加路径(或者是没有权限加路径). 那可以export一个全局变量LD_LIBRARY_PATH, 然后运行程序的时候就会去这个目录中找共享库. 

LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下, 其中有一大堆库文件在/usr/local/mysql/lib下面, 则可以在.bashrc或.bash_profile或shell里加入以下语句即可:

export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH    

 

© 著作权归作者所有

上一篇: Coredump
下一篇: Git入门学习
MacroLiu
粉丝 1
博文 10
码字总数 3724
作品 0
长宁
程序员
私信 提问
Linux 动态库与静态库制作及使用详解

Linux 应用开发通常要考虑三个问题,即:1)在 Linux 应用程序开发过程中遇到过标准库链接在不同 Linux 版本下不兼容的问题; 2)在 Linux 静态库的制作过程中发现有别于 Windows 下静态库的...

IBMdW
2011/11/07
4.3K
0
技巧:Linux 动态库与静态库制作及使用详解

两个要知道的基本知识 Linux 应用程序因为 Linux 版本的众多与各自独立性,在工程制作与使用中必须熟练掌握如下两点才能有效地工作和理想地运行。 Linux 下标准库链接的三种方式(全静态 , ...

澈明
2012/03/31
0
0
[转]gcc头文件库文件搜索路径问题

原文地址:http://blog.csdn.net/diantouxiao/archive/2010/08/25/5836345.aspx 正文: 参考资料:http://hi.baidu.com/relayon/blog/item/95aaf7fcf8e3edf5fc037f89.html 我们编写程序的时候......

Orion
2011/06/12
0
0
gcc同时使用动态和静态链接

gcc同时使用动态和静态链接   场景是这样的。我在写一个Nginx模块,该模块使用了MySQL的C客户端接口库libmysqlclient,当然mysqlclient还引用了其他的库,比如libm, libz, libcrypto等等。...

zongquanliu
2014/11/21
0
0
编写简单的连接MongoDB数据库C++程序 && 解决编译C++程序时链接MongoDB动态...

编写简单的连接MongoDB数据库C++程序 && 解决编译C++程序时链接MongoDB动态库失败的问题。 一. 安装好mongo数据库以后,创建一个用来链接数据库的简单C++程序mon2.cpp,发现很多网站都用这个程...

索隆
2011/12/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

“旧城改造”的背后——银泰新零售阿里云解决方案(上)

相关免费课程《银泰新零售上云解决方案精讲》上线中 立足实战 讲透经典案例 助你快速理解新零售 第一节学习地址 第二节学习地址 传统线下商业体上云的案例 与其说银泰上云,倒不如说银泰“旧...

阿里云官方博客
16分钟前
0
0
记一次升级Oracle驱动引发的死锁

问题描述 近期项目需要从虚拟机环境迁移到容器环境,其中有一个项目在迁移到容器环境之后的两天之内出现了2次“死锁(deadlock)”的问题,部分关键日志如下: Found one Java-level deadlock:...

ksfzhaohui
18分钟前
3
0
MySQL 中的 information_schema 数据库

欢迎查看原文 - 本博客仅记录 https://blog.csdn.net/kikajack/article/details/80065753 -- 是否开启bin_log日志: off为关闭-- show variables like 'log_%'; show variables like '......

莫库什勒
26分钟前
1
0
Random在高并发下的缺陷以及JUC对其的优化

Random可以说是每个开发都知道,而且都用的很6的类,如果你说,你没有用过Random,也不知道Random是什么鬼,那么你也不会来到这个技术类型的社区,也看不到我的博客了。但并不是每个人都知道...

编程SHA
30分钟前
0
0
T5大牛带你解析:如何实现分布式技术

1.分布式事务 2. 分布式锁 Java 原生 API 虽然有并发锁,但并没有提供分布式锁的能力,所以针对分布式场景中的锁需要解决的方案。 分布式锁的解决方案大致有以下几种: 基于数据库实现 基于缓...

李红欧巴
42分钟前
33
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部