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

标签 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

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

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

最佳答案

如果我理解你说的是正确的,当你的进程启动时,正在加载错误版本的 opengl32.dll,即 load-time dynamic linking .如果不更改此设置,可能没有解决问题的好方法。

你说用不方便用run-time dynamic linking (LoadLibrary/GetProcAddress) 用于 opengl32.dll,因为对它的调用来自 Qt 库。但是,我假设 Qt 库本身是动态链接的,因此您应该能够通过使用运行时链接来解决您的问题。在这种情况下,如果您在加载 Qt 库之前加载 opengl32.dll,您应该能够明确选择要加载的 opengl32.dll 版本。

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

关于windows - 有没有办法在 Windows 中模拟 LD_LIBRARY_PATH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9008618/

相关文章:

c++ - 如何查找dll注册失败的原因

linux - 在没有root权限的情况下更新ldconfig缓存

c# - 有没有办法让 UDP .net 套接字在套接字关闭时释放绑定(bind)端口?

windows - 可以使用压缩的 dll 吗?

c++ - 如何从 Visual Studio C++ 项目使用 RTMPDump?

c++ - 使用 C++ 的动态链接问题

c++ - 是什么导致编译库在内部存储其构建命令?

c# - 是否可以通过关联文件将命令行参数传递给可执行文件?

windows - 禁止将 EXCEPTION_DEBUG_EVENT 传递给附加的调试器

windows - 如何在Linux下检查字符集错误的git仓库?