3

在我的 Fedora 19 机器上运行使用 Qt 4.7 的应用程序时,我从应用程序中收到以下错误:

libGL: screen 0 does not appear to be DRI2 capable
libGL: OpenDriver: trying /usr/lib64/dri/tls/swrast_dri.so libGL: OpenDriver: trying /usr/lib64/dri/swrast_dri.so 
libGL: Can't open configuration file /home/Matthew.Hoggan/.drirc: No such file or directory. 
libGL error: failed to load driver: swrast ERROR: Error failed to create progam.

我在使用 glx 配置上下文的股票 X11 应用程序中看不到这些错误。我假设这是因为 Qt 在下面使用 egl。在运行他们的多维数据集示例时,使用来自http://malideveloper.arm.com/develop-for-mali/tools/opengl-es-3-0-emulator/的 EGL 3 模拟器也会发生同样的事情。

我已经验证安装了 xorg-x11-drv-nvidia-libs.i686 和 yum install xorg-x11-drv-nvidia-libs.x86_64 rpms。

我的系统信息是:

Linux localhost.localdomain 3.11.9-200.fc19.x86_64 #1 SMP Wed Nov 20 21:22:24 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

而 glxinfo 是:

[Matthew.Hoggan@localhost QtTest]$ glxinfo | grep version
server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
OpenGL core profile version string: 4.3.0 NVIDIA 331.38
OpenGL core profile shading language version string: 4.30 NVIDIA via Cg compiler
OpenGL version string: 4.4.0 NVIDIA 331.38
OpenGL shading language version string: 4.40 NVIDIA via Cg compiler

这里有什么建议还是需要更多信息?

4

1 回答 1

2

我们能够摆脱同样使用 Qt 的 octave-4.0.0-rc1 的相同错误消息。可以在此处找到错误搜索历史。

事实证明,共享库 (.so) 中的运行路径不正确。运行路径包含 /usr/lib64。因此在运行时加载了 /usr/lib64/libGL.so,而不是正确的 nvidia /usr/X11R6/lib64/libGL.so。

解决方法

  1. 查找具有不正确运行路径的库或可执行ldd <app or lib>文件chrpath -l <app or lib>
  2. 用正确的路径替换错误的路径(没有令人讨厌的 /usr/lib64),使用chrpath -r <correct path> <app or lib>
    以下单行器为 liboctgui.so 执行此操作。只需将“liboctgui.so”替换为您的值即可。 chrpath -r $(chrpath -l liboctgui.so | cut -d '=' -f '2' | awk '{gsub(/\/usr\/lib64/, "")}; 1') liboctgui.so

起源

编译时从 /usr/lib64 中不相关-L/usr/lib64的文件中提取了不正确的运行路径。注释 #18解释了为什么它是错误的libQt*.la

实际上,根据OpenSUSE 自己的建议lib*.la,不应打包文件

避免打包 libtool 配置文件(.la 文件)。如果您不打包静态库,并且如果您还将共享库放在标准搜索目录(即 %_lib、/usr/%_lib)中,则不需要它们。

从 /usr/lib64 中删除lib*.la并重建解决了这个问题。

于 2015-03-14T20:39:21.330 回答