首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >库文件由ldconfig找到,而不是由ldd找到。

库文件由ldconfig找到,而不是由ldd找到。
EN

Unix & Linux用户
提问于 2015-08-10 21:55:37
回答 1查看 1.4K关注 0票数 2

我已经构建了OpenGL加速库(libGL和libGLU),它保存在特定的目录/usr/lib/mali中。我还有一个OpenGL的软件实现,它安装在/usr/lib/arm-linux-gnueabihf中。这两个目录都被添加到/etc/ld.so.conf中,/usr/lib/mali放在第一位,所以程序更喜欢使用它的库。

ldconfig查找所有库:

代码语言:javascript
复制
$ sudo ldconfig -v
/usr/lib/mali:
libGLU.so.1 -> libGLU.so.1
libGL.so.1.2.0 -> libGL.so.1
/usr/lib/arm-linux-gnueabihf:
libGL.so.1 -> libGL.so.1.5.08005
libGLU.so.1 -> libGLU.so.1.3.08005

奇怪的是,ldconfig创建了一个符号链接libGL.so.1.2.0,但是没有为libGLU做任何事情。ldd输出甚至更奇怪:

代码语言:javascript
复制
ldd `which glxgears`
libGLU.so.1 => /usr/lib/mali/libGLU.so.1 (0xb6e4a000)
libGL.so.1 => /usr/lib/arm-linux-gnueabihf/libGL.so.1 (0xb6bb5000)
libGL.so.1.2.0 => /usr/lib/mali/libGL.so.1.2.0 (0xb67f1000)

输出表明,libGLU是从硬件加速目录中提取的,而libGL则坚持软件实现。libGL.so.1.2.0也是出于某种原因加载的。最后,在运行glxgears时使用了软件实现。

有人能解释一下发生了什么事吗?在默认情况下,如何使硬件加速库加载,而不从/usr/lib/arm-linux-gnueabihf/中删除或覆盖软件库(它们实际上是包依赖项)?

PS:当我将/usr/lib/mali/添加到LD_LIBRARY_PATH中时,硬件加速库确实可以工作。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2015-08-13 17:44:09

问题确实发生在我的Makefile设置中。用objdump检查图书馆揭示了根本原因:

代码语言:javascript
复制
$ objdump -p libGL.so.1 |grep SONAME
SONAME               libGL.so.1.2.0

ldd同时显示了libGL.so.1libGL.so.1.2.0,因为第一个是由glxgears导入的,第二个是通过我的libGLU实现导入的,后者是针对硬件加速版libGL构建的,因此知道它的名字libGL.so.1.2.0

解决办法是用-soname,libGL.so.1修改奏鸣曲。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/222396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档