有没有办法在Windows中模拟LD_LIBRARY_PATH?

lik*_*kso 6 windows dll shared-libraries library-path

我有一个程序这样做一些图形.当我以交互方式运行它时,我希望它从系统中使用OpenGL来提供硬件加速图形.当我批量运行它时,我希望能够重定向它以使用Mesa GL库,以便我可以使用OSMesa功能渲染到屏幕外缓冲区.如果选择批量启动选项,则通过执行LoadLibrary/GetProcAddress来启用OSMesa功能.

在Linux上,它很容易使这项工作.通过使用包装器脚本来调用程序,我可以这样做:

if [ "$OPTION" = "batch" ]; then
  export LD_LIBRARY_PATH=$PATHTO/mesalibs:$LD_LIBRARY_PATH
fi
Run Code Online (Sandbox Code Playgroud)

可以在Windows中执行此操作吗?

当我尝试将目录添加到PATH变量时,程序继续转到系统opengl32.dll.我可以让程序使用Mesa GL/OSMesa共享库的唯一方法是让它们与我的程序驻留在同一目录中.但是,当我这样做时,程序将永远不会使用系统opengl32.dll.

Har*_*ton 5

如果我已经理解了你正确的说法,那么当你的进程启动时会加载错误版本的opengl32.dll,即加载时动态链接.如果不改变这个问题,可能没有好办法解决问题.

你说你不能方便地使用opengl32.dll的运行时动态链接(LoadLibrary/GetProcAddress),因为对它的调用来自Qt库.我认为Qt库本身是动态链接的,因此您应该能够通过使用运行时链接来解决问题.在这种情况下,只要你加载OPENGL32.DLL您加载Qt库之前,你应该能够明确选择要加载OPENGL32.DLL的版本.

您可能需要考虑使用延迟加载,以简化从加载时间到运行时链接的过程.在这种情况下,第一次调用Qt库会导致它自动加载,您只需要首先显式加载opengl32.dll.