延迟加载opengl32.dll失败,出现Qt5
Delay-loading of opengl32.dll fails with Qt5
我需要在Windows 7上的Qt5项目中使用OpenGL版本2的功能(Qt是用桌面OpenGL而不是ANGLE构建的)。为了支持通过远程桌面运行应用程序,如果有必要,我想回到通过Mesa进行软件渲染。我的计划是在启动时检查OpenGl版本。如果它是低,我在应用程序设置中设置一个标志,打印一条消息并终止程序。当程序再次启动时,我可以读取标志,并决定是否需要从Mesa加载opengl32.dll,而不是Windows的内置版本。
为了实现这一点,我尝试通过设置/DELAYLOAD:opengl32.dll
链接器标志来延迟加载opengl32.dll,然后使用SetDllDierectoryW([path to dir with Mesa's opengl32.dll])
重定向dll查找。不幸的是,这不起作用,因为opengl32.dll的内置版本在输入main()
后就已经在内存中了,因此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移入或移出应用程序目录进行切换是不可行的,因为普通用户不应该拥有所需的写入权限。
有没有办法让opengl32.dll的延迟加载与Qt5一起工作?
Qt5Gui本身链接到OpenGL。如果您的应用程序能够延迟加载此库,则可以尝试在不使用系统路径的情况下调用QCoreApplication::setLibraryPaths(),而使用库的路径。
除此之外,您还可以调整qt.conf文件。点击此处阅读:http://qt-project.org/doc/qt-5/qt-conf.html
- 为"adjacent"变量赋值时出现问题
- 在Ubuntu 16.04上安装Cilk时出现问题
- 代码在main()中运行,但在函数中出现错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 在某些循环内使用vector.push_back时出现分段错误
- C++中的赋值发生,尽管右侧出现异常
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 我想做一个彼此不同但重复出现的数字
- 运行程序时出现问题
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- Qt5 C++中出现意外"Multiple definition"错误
- 在 qt5 中使用 QSharedPointer 时出现 Seg 错误
- 延迟加载opengl32.dll失败,出现Qt5
- QT 创建器 qt5.1 vs2010 使用静态库时出现链接器错误
- QT5打开串行端口时出现问题
- Qt5:此代码使用msvc2012编译正常,但使用MinGW编译时出现错误..为什么?
- 在将cURL库加载到Qt5后出现错误
- 移动到 Qt5 时出现编译错误:尚未声明'Type'