C++ 从QtCreator启动OpenGl应用程序时出现严重问题

C++ 从QtCreator启动OpenGl应用程序时出现严重问题,c++,qt,opengl,qt-creator,qt5,C++,Qt,Opengl,Qt Creator,Qt5,我的平台是fedora 21 x64和QT 5.4 qtcreator 3.3.0 我的图形卡是NVS4100,安装支持OpenGl的NVIDIA驱动程序 当我在qtcreator之外执行编译的opengl应用程序时,它可以正常工作 当我从qt creator执行相同操作时,我会收到错误消息: libGL错误:找不到匹配的FBConfig或Visual libGL错误:无法加载驱动程序:swrast 。。。 经过一些调查,我发现QProcess::start use by qtcreator在环

我的平台是fedora 21 x64和QT 5.4 qtcreator 3.3.0

我的图形卡是NVS4100,安装支持OpenGl的NVIDIA驱动程序

  • 当我在qtcreator之外执行编译的opengl应用程序时,它可以正常工作
  • 当我从qt creator执行相同操作时,我会收到错误消息:

    libGL错误:找不到匹配的FBConfig或Visual

    libGL错误:无法加载驱动程序:swrast

  • 。。。 经过一些调查,我发现QProcess::start use by qtcreator在环境中添加/usr/lib64到LD_LIBRARY_路径,这破坏了链接器(使用命令ldd)指示的正确本地化(libGL.so.1=>/usr/lib64/nvidia/libGL.so.1(0x00007fe25ca7d000ich)

    我怎样才能改变这一点?
    从qtcreator更改LD_LIBRARY_路径的所有尝试都失败,Qprocess::start append/usr/lib64在前面?

    我在以下错误报告中找到了基本问题的答案:


    显然,Qt需要修复名为DesktopQmakeRunConfiguration的函数/方法。

    我对fedora 19 x64和Qt 5.3.2也有同样的问题

    libGL错误:无法加载驱动程序:swrast

    正如您所指出的,LD_LIBRARY_PATH似乎弄乱了正确库的本地化(/usr/lib64/libGL.so.1而不是/usr/lib64/nvidia/libGL.so.1)

    在我的例子中,这是由以下行在my.pro文件中添加外部库引起的:

    unix:!macx:LIBS+=-L/usr/lib64-lrt

    为了避免路径不明确并解决此问题,我指定了需要链接的库的名称:

    unix:!macx:LIBS+=-L/usr/lib64/librt.so-lrt

    在这之后,libGL错误消失了!!(我仍然能够在openSUSE 13.2上链接librt.so)


    我可以将项目“运行配置”中的“LD_LIBRARY_PATH”或“设置>选项>构建和运行>工具包>环境”中更一般的位置中的“LD_LIBRARY_PATH”更改为nothing,或更改为AMD专有驱动程序“libGL.so”的路径“/usr/X11R6/lib64/”openGL程序运行时不会出错。

    使用OpenSuse 42.1和Qt Creator 5时也会出现同样的错误。在使用社区NVidia repo更新视频驱动程序后开始出现错误。显然,只有在使用64位linux发行版时才会出现此错误。我可以通过编辑Qt Creator中的LD_LIBRARY_路径从/usr/lib64到/usr/lib

    当我从Macbook Pro ssh进入我的Ubuntu虚拟机时,我遇到了同样的问题。在我的Ubuntu 16.04 64位操作系统上安装下面的驱动程序为我解决了这个问题。希望这对其他人有所帮助


    sudo apt get install nvidia-331

    我在Arch Linux上多次遇到类似问题。提到的错误阻止程序启动:

    libGL错误:找不到匹配的FBConfig或Visual

    libGL错误:无法加载驱动程序:swrast

    在我的案例中,一个可行的快速解决方案是LD_预加载正确的库:

    $ LD_PRELOAD='/usr/lib/nvidia/libGL.so' <program>
    

    <>英伟达4.5.2,我在Ung>项目> ->构建和运行>运行运行> >运行< /COD>。.so.nonvidia****mv libGL.so.1 libGL.so.1.nonvidia ln-s/usr/lib64/nvidia/libGL.so.1 libGL.so.1 ln-s/usr/lib64/nvidia/libGL.so.1 libGL.so旧的符号链接不利于解决某些问题,但您最初关心的问题是正确的。我希望有人知道它的真正答案。但是,它是否可以在其他发行版上复制?更好的方法是将/usr/lib64附加到LD_LIBRARY_PATH**1)在QtCreator中查找并复制您的LD_LIBRARY_PATH****2),转到项目->工具包->运行->运行环境,编辑并粘贴预期的LD\U库\U路径值**也可以
    $ namei /usr/lib/nvidia/libGL.so
    f: /usr/lib/nvidia/libGL.so
     d /
     d usr
     d lib
     d nvidia
     l libGL.so -> libGL.so.1
       l libGL.so.1 -> libGL.so.340.107
         - libGL.so.340.107
    $ file /usr/lib/nvidia/libGL.so.340.107
    /usr/lib/nvidia/libGL.so.340.107: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, stripped