gpt4 book ai didi

c++ - Qt5 延迟加载 opengl32.dll 失败

转载 作者:可可西里 更新时间:2023-11-01 12:53:05 26 4
gpt4 key购买 nike

我需要在 Windows 7 上的 Qt5 项目中使用 OpenGL 版本 2 功能(Qt 是使用桌面 OpenGL 而不是 ANGLE 构建的)。为了支持通过远程桌面运行应用程序,我想在必要时回退到通过 Mesa 进行软件渲染。我的计划是在启动时检查 OpenGl 版本。如果它太低,我会在应用程序设置中设置一个标志,打印一条消息并终止程序。当程序再次启动时,我可以读取标志并决定是否需要从 Mesa 加载 opengl32.dll 而不是 Windows 的内置版本。

为了让它正常工作,我尝试通过设置 /DELAYLOAD:opengl32.dll 链接器标志然后使用 SetDllDierectoryW([Mesa 的 opengl32.dll 的目录路径来延迟加载 opengl32.dll ]) 重定向 dll 查找。不幸的是,这不起作用,因为在进入 main() 后,内置版本的 opengl32.dll 已经在内存中,因此 SetDllDirectory 无效。

Dependency Walker 向我展示了 Qt5Gui.dll 本身与 opengl32.dll 相关联,我怀疑这会破坏延迟加载。但是当我尝试延迟加载 Qt5Gui.dll 时,链接器由于导入的符号 "__declspec(dllimport) public: static struct QMetaObject const QWindow::staticMetaObject"(__imp_?staticMetaObject@QWindow@@2UQMetaObject@@ B)。我不知道如何摆脱它。

我真的需要 OpenGL 2,所以似乎没有办法使用 Mesa 进行软件渲染。但我也想不出延迟加载的替代方法。每当我想在硬件和软件渲染之间切换时更改 PATH 设置似乎不起作用,并且通过将 Mesa 的 opengl32.dll 移入或移出应用程序目录来进行切换不是一个选项,因为普通用户不应该具有所需的写入权限。

有什么方法可以延迟加载与 Qt5 一起使用的 opengl32.dll?

最佳答案

Qt5Gui 本身链接到 OpenGL。如果您的应用程序能够延迟加载此库,您可以尝试在没有系统路径的情况下调用 QCoreApplication::setLibraryPaths(),而是使用您的库的路径。

除此之外,您还可以调整 qt.conf 文件。在这里阅读:http://qt-project.org/doc/qt-5/qt-conf.html

关于c++ - Qt5 延迟加载 opengl32.dll 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22133461/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com