Fedora 19使用rpmfussion的NVIDIA驱动程序:libGL错误:无法加载驱动程序:swrast

时间:2014-02-09 05:31:40

标签: opengl fedora nvidia egl glx

在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配置上下文的stock 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

此处有任何建议或需要更多信息吗?

1 个答案:

答案 0 :(得分:2)

我们能够摆脱使用Qt的octave-4.0.0-rc1的相同错误消息。可以找到错误捕获历史here

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

解决方法

  1. 使用ldd <app or lib>chrpath -l <app or lib>
  2. 查找包含错误运行路径的lib或可执行文件
  3. 使用chrpath -r <correct path> <app or lib>替换错误的路径(没有违反/ usr / lib64) 以下单行为liboctgui.so做了这个。只需替换&#34; liboctgui.so&#34;靠你的价值。 chrpath -r $(chrpath -l liboctgui.so | cut -d '=' -f '2' | awk '{gsub(/\/usr\/lib64/, "")}; 1') liboctgui.so
  4. 来源

    在编译时从不相关的地方拾取了错误的运行路径 位于/ usr / lib64中的-L/usr/lib64个文件中的libQt*.lacomment #18解释了为什么它是错误的。

    事实上,根据OpenSUSE own recommendations

    lib*.la文件不应打包
      

    避免打包libtool配置文件(.la文件)。如果你不   打包一个静态库,如果你也放置了共享   它们是标准搜索目录中的库(即%_lib,/ usr /%_ lib)   不需要。

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