我已经建立了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
。
问题确实出在我的Makefile设置中。检查库并objdump
揭示了根本原因:
$ objdump -p libGL.so.1 |grep SONAME
SONAME libGL.so.1.2.0
ldd
显示了libGL.so.1
和libGL.so.1.2.0
,因为第一个是glxgears
由我导入的,第二个是由我导入的,而我的实现libGLU
是针对的硬件加速版本构建的libGL
,因此知道了它的名称libGL.so.1.2.0
。
解决的方法是使用来更改soname -soname,libGL.so.1
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句