【问题标题】:qml works from console, but doesn't work under qt creatorqml 在控制台上工作,但在 qt creator 下不起作用
【发布时间】:2017-05-17 09:35:45
【问题描述】:

我用

Qt Creator 4.4.0-beta1 (4.3.82)

基于 Qt 5.7.1(GCC 5.3.0,64 位)

我基于提供qt creator:Qt Quick Controls 2 的模板创建了项目。并且不要对其进行任何修改。

如果我在qt creator 中按下run 按钮,我会收到这样的消息(在qt creator 内的控制台内):

正在启动.../build-test1-qt5-Debug/test1...

QML 调试已启用。只能在安全的环境中使用。

libGL 错误:找不到匹配的 fbConfigs 或视觉对象

libGL 错误:未能加载驱动程序:swrast

无法识别的 OpenGL 版本

无法识别的 OpenGL 版本

一开始我想linux kernel/nvidia driver/xorg和Qt合作的问题,但是我可以运行./build-test1-qt5-Debug/test1没有任何问题 来自xterm

./build-test1-qt5-Debug/test1

QML 调试已启用。只能在安全的环境中使用。

qml:按钮按下。输入文字:

那么任何提示从qt creator 运行qml 或直接不使用qt creator 有什么区别?

程序的输出,我在qt creatorLIBGL_DEBUG=verbose 中运行:

QML debugging is enabled. Only use this in a safe environment.
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/evgeniy/.drirc: No such file or directory.
libGL: Can't open configuration file /home/evgeniy/.drirc: No such file or directory.
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
function is no-op
Unrecognized OpenGL version
Unrecognized OpenGL version

【问题讨论】:

  • 您确定在这两种情况下都使用相同的 Qt 库吗?如果你在 Linux 上,一个想法是在一种情况下你在 X11 上运行,在另一种情况下在 Wayland 上运行。
  • @BenjaminT 是的,我只有一个 Qt 5.7,我可以连接 gdb 以测试在“内部”qt creator 运行的应用程序,gdb 显示与我运行时相同的二进制库xterm 中的应用程序。而且我的系统上没有 Wayland,只有 xorg。
  • 你有Nvidia卡吗?在 Nvidia 机器上的 Ubuntu 上,Snaps 生成了 similar error messages。按照链接,我到了this bug report。在 Nvidia 机器上尝试启动 Flatpack 应用程序时,我听说过同样的错误消息。
  • 也许this bug report 更相关。
  • @Alexey 是的,我使用的是 nvidia 闭源驱动,以及相应的硬件。

标签: linux qt opengl qml nvidia


【解决方案1】:

看来,你的项目运行环境变量有问题,你有两个选择:

  1. 转到 xterm,运行 env 命令,复制环境变量,现在转到 qt creator,打开运行窗格,在运行环境中选择干净的环境并进行批量编辑(通过批量编辑按钮)并将复制的环境变量粘贴到那里,它应该可以解决您的问题

  2. 转到 Qt Creator -> 运行窗格 -> 运行环境并选择系统环境作为默认运行环境配置

【讨论】:

  • 我怀疑环境变量中的问题,我在“项目窗格”->“运行环境”中尝试了“清洁”、“系统”和“构建”变体。 “干净”的环境显然不起作用,因为DISPLAY 未设置,其他人会导致我在我的问题中提供的错误。请注意,我从所有按预期工作的同一个 xterm 运行“qt creator”。无论如何,我通过手动将“干净”配置中的环境变量设置为env 的输出来尝试您的建议,但错误不会改变
  • 输入 LIBGL_DEBUG=verbose,因此 libgl 将是详细的,并在您的问题中包含详细日志。
  • 我更新了我的问题,我直接从 xterm 运行的程序的输出没有被 LIBGL_DEBUG 更改
【解决方案2】:

刚刚让这个为我自己工作。尝试将以下行添加到您的 .bashrc 文件中:

export LD_PRELOAD='/usr/$LIB/libstdc++.so.6'
export DISPLAY=:1

刷新终端并运行你的程序。

【讨论】:

    【解决方案3】:

    就我而言,我必须在项目 > 运行环境中取消设置 LD_LIBRARY_PATH。对于套件和系统环境,它被设置为为系统包配置的某个值,因此它们将仅依赖于 Mesa 而不是 NVidia GLX 库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      • 2017-04-10
      • 2015-07-12
      • 2017-06-14
      • 1970-01-01
      • 2015-05-27
      相关资源
      最近更新 更多