ldconfig 找到了库文件,但 ldd 找不到

ldconfig 找到了库文件,但 ldd 找不到

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

ldconfig查找所有库:

$ 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更奇怪:

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.

答案1

问题确实出在我的 Makefile 设置中。检查库objdump揭示了根本原因:

$ objdump -p libGL.so.1 |grep SONAME
SONAME               libGL.so.1.2.0

ldd显示了libGL.so.1libGL.so.1.2.0,因为第一个是由我导入的glxgears,第二个是由我导入的,libGLU它是针对硬件加速版本构建的libGL,因此知道它的soname libGL.so.1.2.0,。

修复方法是将 soname 更改为-soname,libGL.so.1.

相关内容