2014-10-05 68 views
2

我试图调试我的gDEBugger OpenGl的项目,但gDebugger libGL函数错误不幸gDEBugger甚至没有开始:在Linux上

~/bin/gDEBugger581-x86_64> ./gDEBugger-bin 
libGL error: failed to load driver: swrast 
libGL error: Try again with LIBGL_DEBUG=verbose for more details. 
Segmentation fault 
~/bin/gDEBugger581-x86_64> LIBGL_DEBUG=verbose ./gDEBugger-bin 
libGL: screen 0 does not appear to be DRI2 capable 
libGL: OpenDriver: trying /usr/lib64/dri/updates/tls/swrast_dri.so 
libGL: OpenDriver: trying /usr/lib64/dri/updates/swrast_dri.so 
libGL error: dlopen /usr/lib64/dri/updates/swrast_dri.so failed (/usr/lib64/dri/updates /swrast_dri.so: cannot open shared object file: No such file or directory) 
libGL: OpenDriver: trying /usr/lib64/dri/tls/swrast_dri.so 
libGL: OpenDriver: trying /usr/lib64/dri/swrast_dri.so 
libGL error: dlopen /usr/lib64/dri/swrast_dri.so failed (/usr/lib64/dri/swrast_dri.so:  undefined symbol: _glapi_tls_Dispatch) 
libGL error: unable to load driver: swrast_dri.so 
libGL error: failed to load driver: swrast 
Segmentation fault 

出现这种情况与上次gremedy版本(5.8.1),最后AMD版本(6.2.4)和最新的CodeXL版本(CodeXL不会崩溃,但同样的错误出现不少,调试不起作用)。

我在OpenSuse 13.1,我有一个NVIDIA显卡和最新的驱动程序安装。其他的OpenGL程序工作得很好。到目前为止,我试图重新安装的NVIDIA驱动程序,重新安装所有MESA包,更新CUDA 5.5至6.5,检查所有的台面包从标准SUSE回购安装并运行LDD:

~/bin/gDEBugger581-x86_64> ldd gDEBugger-bin 
    linux-vdso.so.1 (0x00007fffe9ffe000) 
    libGRBaseTools.so => ./libGRBaseTools.so (0x00007f41df93e000) 
    libGROSWrappers.so => ./libGROSWrappers.so (0x00007f41df6cc000) 
    libGRAPIClasses.so => ./libGRAPIClasses.so (0x00007f41df358000) 
    libGRProcessDebugger.so => ./libGRProcessDebugger.so (0x00007f41df123000) 
    libGRApiFunctions.so => ./libGRApiFunctions.so (0x00007f41deedf000) 
    libGRApplicationComponents.so => ./libGRApplicationComponents.so (0x00007f41debce000) 
    libgDEBuggerAppCode.so => ./libgDEBuggerAppCode.so (0x00007f41de5b0000) 
    libwx_base-2.8.so.0 => ./libwx_base-2.8.so.0 (0x00007f41de29e000) 
    libwx_gtk2_core-2.8.so.0 => ./libwx_gtk2_core-2.8.so.0 (0x00007f41ddcd9000) 
    libwx_gtk2_html-2.8.so.0 => ./libwx_gtk2_html-2.8.so.0 (0x00007f41dda2f000) 
    libwx_gtk2_adv-2.8.so.0 => ./libwx_gtk2_adv-2.8.so.0 (0x00007f41dd753000) 
    libwx_gtk2_aui-2.8.so.0 => ./libwx_gtk2_aui-2.8.so.0 (0x00007f41dd4e2000) 
    libwx_gtk2_gl-2.8.so.0 => ./libwx_gtk2_gl-2.8.so.0 (0x00007f41dd2d5000) 
    libwx_gtk2_stc-2.8.so.0 => ./libwx_gtk2_stc-2.8.so.0 (0x00007f41dcfcb000) 
    libfreeimage.so.3 => ./libfreeimage.so.3 (0x00007f41dcc35000) 
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f41dc92d000) 
    libm.so.6 => /lib64/libm.so.6 (0x00007f41dc62a000) 
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f41dc413000) 
    libc.so.6 => /lib64/libc.so.6 (0x00007f41dc065000) 
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f41dbe61000) 
    librt.so.1 => /lib64/librt.so.1 (0x00007f41dbc59000) 
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f41dba3b000) 
    libX11.so.6 => /usr/lib64/libX11.so.6 (0x00007f41db6fd000) 
    libz.so.1 => /lib64/libz.so.1 (0x00007f41db4e7000) 
    libGL.so.1 => /usr/X11R6/lib64/libGL.so.1 (0x00007f41db19b000) 
    libgtk-x11-2.0.so.0 => /usr/lib64/libgtk-x11-2.0.so.0 (0x00007f41dab5c000) 
    libgdk-x11-2.0.so.0 => /usr/lib64/libgdk-x11-2.0.so.0 (0x00007f41da8a7000) 
    libatk-1.0.so.0 => /usr/lib64/libatk-1.0.so.0 (0x00007f41da683000) 
    libgio-2.0.so.0 => /usr/lib64/libgio-2.0.so.0 (0x00007f41da31c000) 
    libpangoft2-1.0.so.0 => /usr/lib64/libpangoft2-1.0.so.0 (0x00007f41da108000) 
    libgdk_pixbuf-2.0.so.0 => /usr/lib64/libgdk_pixbuf-2.0.so.0 (0x00007f41d9ee7000) 
    libpango-1.0.so.0 => /usr/lib64/libpango-1.0.so.0 (0x00007f41d9c9b000) 
    libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x00007f41d9a09000) 
    libfontconfig.so.1 => /usr/lib64/libfontconfig.so.1 (0x00007f41d97cc000) 
    libgobject-2.0.so.0 => /usr/lib64/libgobject-2.0.so.0 (0x00007f41d957b000) 
    libgmodule-2.0.so.0 => /usr/lib64/libgmodule-2.0.so.0 (0x00007f41d9377000) 
    libgthread-2.0.so.0 => /usr/lib64/libgthread-2.0.so.0 (0x00007f41d9175000) 
    libglib-2.0.so.0 => /usr/lib64/libglib-2.0.so.0 (0x00007f41d8e72000) 
    libXinerama.so.1 => /usr/lib64/libXinerama.so.1 (0x00007f41d8c6f000) 
    libXxf86vm.so.1 => /usr/lib64/libXxf86vm.so.1 (0x00007f41d8a69000) 
    libSM.so.6 => /usr/lib64/libSM.so.6 (0x00007f41d8861000) 
    libGLU.so.1 => /usr/lib64/libGLU.so.1 (0x00007f41d85e2000) 
    /lib64/ld-linux-x86-64.so.2 (0x00007f41dfb49000) 
    libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007f41d83c3000) 
    libnvidia-tls.so.340.32 => /usr/lib64/tls/libnvidia-tls.so.340.32 (0x00007f41d81c0000) 
    libnvidia-glcore.so.340.32 => /usr/lib64/libnvidia-glcore.so.340.32 (0x00007f41d55ad000) 
    libXext.so.6 => /usr/lib64/libXext.so.6 (0x00007f41d539b000) 
    libpangocairo-1.0.so.0 => /usr/lib64/libpangocairo-1.0.so.0 (0x00007f41d518e000) 
    libXfixes.so.3 => /usr/lib64/libXfixes.so.3 (0x00007f41d4f88000) 
    libcairo.so.2 => /usr/lib64/libcairo.so.2 (0x00007f41d4c69000) 
    libXrender.so.1 => /usr/lib64/libXrender.so.1 (0x00007f41d4a5f000) 
    libXi.so.6 => /usr/lib64/libXi.so.6 (0x00007f41d484f000) 
    libXrandr.so.2 => /usr/lib64/libXrandr.so.2 (0x00007f41d4645000) 
    libXcursor.so.1 => /usr/lib64/libXcursor.so.1 (0x00007f41d443a000) 
    libXcomposite.so.1 => /usr/lib64/libXcomposite.so.1 (0x00007f41d4237000) 
    libXdamage.so.1 => /usr/lib64/libXdamage.so.1 (0x00007f41d4034000) 
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f41d3e10000) 
    libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f41d3bf9000) 
    libharfbuzz.so.0 => /usr/lib64/libharfbuzz.so.0 (0x00007f41d39a6000) 
    libpng16.so.16 => /usr/lib64/libpng16.so.16 (0x00007f41d3769000) 
    libexpat.so.1 => /usr/lib64/libexpat.so.1 (0x00007f41d353f000) 
    libffi.so.4 => /usr/lib64/libffi.so.4 (0x00007f41d3337000) 
    libpcre.so.1 => /usr/lib64/libpcre.so.1 (0x00007f41d30d1000) 
    libICE.so.6 => /usr/lib64/libICE.so.6 (0x00007f41d2eb5000) 
    libuuid.so.1 => /usr/lib64/libuuid.so.1 (0x00007f41d2cb0000) 
    libXau.so.6 => /usr/lib64/libXau.so.6 (0x00007f41d2aac000) 
    libpixman-1.so.0 => /usr/lib64/libpixman-1.so.0 (0x00007f41d2803000) 
    libEGL.so.1 => /usr/X11R6/lib64/libEGL.so.1 (0x00007f41d24fa000) 
    libxcb-shm.so.0 => /usr/lib64/libxcb-shm.so.0 (0x00007f41d22f7000) 
    libxcb-render.so.0 => /usr/lib64/libxcb-render.so.0 (0x00007f41d20ed000) 
    libgraphite2.so.3 => /usr/lib64/libgraphite2.so.3 (0x00007f41d1ed1000) 
    libnvidia-glsi.so.340.32 => /usr/lib64/libnvidia-glsi.so.340.32 (0x00007f41d1c49000) 

我注意到,那当使用LIBGL_DEBUG=verbose运行我自己的程序时,根本没有libGL输出。如果有问题,我使用glfw 2.7和glew 1.9。谷歌应用程序工作

我想gDEBugger有不同的方式来查找和加载libGL,并以某种方式结束了使用mesa one而不是nvidia one。但是我对mesa和nvidia驱动程序的知识以及它的工作是非常有限的。

编辑: 新的信息:

strace -e open ./gDEBugger-bin 2>&1 | grep libGL.so 
open("./tls/x86_64/libGL.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
open("./tls/libGL.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
open("./x86_64/libGL.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
open("./libGL.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
open("/usr/lib64/mpi/gcc/openmpi/lib64/libGL.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
open("/home/damdam/bin/pgmodeler/libGL.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
open("/usr/X11R6/lib64/libGL.so.1", O_RDONLY|O_CLOEXEC) = 3 
open("/usr/X11R6/lib64/libGL.so.340.32", O_RDONLY) = 3 
open("/usr/X11R6/lib64/libGL.so.340.32", O_RDONLY) = 3 
open("/usr/X11R6/lib64/libGL.so.340.32", O_RDONLY) = 4 
open("/usr/lib64/libGL.so.1", O_RDONLY|O_CLOEXEC) = 7 
open("/usr/X11R6/lib64/libGL.so.340.32", O_RDONLY) = 7 
open("/usr/lib64/libGL.so.1", O_RDONLY) = 7 

作比较,这是一个工作程序相同:http://paste.opensuse.org/76645738 ,这是完整的输出(无grep的):http://paste.opensuse.org/8336779

我试着在/usr/lib64/中设置以下链接:

libGLESv1_CM.so -> /usr/X11R6/lib64/libGLES 
libGLESv1_CM.so.1 -> /usr/X11R6/lib64/libGL 
libGLESv1_CM.so.1.1.0 -> /usr/X11R6/lib64/l 
libGLESv2.so -> /usr/X11R6/lib64/libGLESv2. 
libGLESv2.so.2 -> /usr/X11R6/lib64/libGLESv 
libGLESv2.so.2.0.0 -> /usr/X11R6/lib64/libG 
libGL.so -> /usr/X11R6/lib64/libGL.so 
libGL.so.1 -> /usr/X11R6/lib64/libGL.so 
libGL.so.1.2 -> /usr/X11R6/lib64/libGL.so 
libGL.so.1.2.0 -> /usr/X11R6/lib64/libGL.so 

after th在行为改变时,程序崩溃并出现段错误,而不是打印任何东西。

编辑: 新的信息 的gremedy gDEBugger(5.8.1)不会加载/usr/lib64/libGL.so时

export LIBGL_DRIVERS_PATH="/usr/X11R6/lib64/" 

它只是崩溃了。所以现在我的猜测是,它始终知道正确的libGL,但无法加载它。或者我的系统有些奇怪,或者我是第一个关于这个问题的报告。

回答

2

我有同样的问题,相同的发行版,相同的版本。最终我将其追溯到环境变量LD_LIBRARY_PATH

我已经将/usr/lib//usr/lib64/添加到LD_LIBRARY_PATH以尝试解决链接问题。看起来包括LD_LIBRARY_PATH中的那些目录代表来自软件包x11-video-nvidiaG02的软件包Mesa-libGL1 hid /usr/X11R6/lib64/libGL.so.1/usr/lib64/libGL.so.1

重新导出LD_LIBRARY_PATH没有那两个目录已经将libGL整理出来并重新工作。

1

错误消息表明由于某种原因gDEBugger动态链接了一个Mesa变体libGL.so(只有Mesa试图谈论DRI协议)。使用系统中的NVidia GPU,并且我认为NVidia专有的驱动程序也正在安装和配置,这表明,有些问题严重失控。

另一种可能性是,您没有安装NVidia专有驱动程序并且完全在Mesa外运行。问题是,Mesa的NVidia GPU支持仅仅是2005年以来建成的任何GPU的基础。

请注意,如果您使用的是NVidia专有驱动程序,则根本不需要安装Mesa(虽然拥有它并使用Mesa libGL.so作为程序的链接目标,即使在运行时使用NVidia libGL.so也是相当明智的)。

+0

我在想这样的事情,但我不知道如何找到并解决问题。 是的,nvidia驱动程序已安装。如上所述,其他的opengl程序运行良好。 你会建议尝试卸载台面? – Adam 2014-10-05 12:23:12

+0

@Adam:如有疑问:停止X11服务器,登录文本控制台,卸载与实现OpenGL(mesa,nvidia驱动程序等)相关的所有软件包,'find/-name'libGL.so'-print - 删除“并重新安装NVidia驱动程序。 – datenwolf 2014-10-05 12:24:49

+0

@Adam:分析这个问题,比较关于libGL.so的'ldd $(which glxinfo)'与'ldd gDEBugger-bin'的输出。然后检查他们链接的文件是否属于NVidia或Mesa(可能是一个符号链接,因此您必须按照该链接进行操作)。 – datenwolf 2014-10-05 12:26:22