windows - 是否有与 -rpath 链接器标志等效的 Windows/MSVC?

标签 windows dll shared rpath

在 Linux/GCC 上,我可以使用 -rpath 标志更改共享库的可执行文件搜索路径,而无需调整环境变量。

这也可以在 Windows 上完成吗?据我所知,总是在可执行文件的目录和 PATH 中搜索 dll。

我的方案:我想根据共享库的属性(32/64 位/调试/发布)将共享库放入位置,而不考虑唯一名称。在 Linux 上,这很容易通过 rpath 完成,但我还没有找到在 Windows 上执行此操作的任何方法。

感谢任何提示!

最佳答案

遗憾的是,没有与 RPATH 的直接模拟。有许多可供选择的可能性,每一种都可能以其独特的方式让您不喜欢。

鉴于您无论如何都需要为每种构建风格使用不同的 exe 以避免运行时库冲突,您可能会猜到最简单的做法是将每个 exe 放在与每组 DLL 相同的文件夹中。

正如您还提到的,最通用的方法是通过使用批处理文件来引导 exe 来更改 PATH 变量。

您可以改为在将程序运行到所需的 DLL 文件夹之前更改当前工作目录。

您可以使用函数 SetDllDirectoryAddDllDirectory在你的exe里面。这可能是最接近 RPATH 的,但仅适用于 WinXP SP1 或更高版本。

如果您愿意更改每个 exe 风格的文件名,您可以使用“App Paths”注册表项。每个 exe 都需要一个唯一的文件名。

关于windows - 是否有与 -rpath 链接器标志等效的 Windows/MSVC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/107888/

相关文章:

c++ - DUMPBIN 不显示所有功能

c# - 有没有办法强制执行静态方法?

c - 在C程序中使用动态库dll

c - 如何使用共享内存在进程之间共享信号量

Git:服务器上多个用户的 repo

windows - Windows 服务器 2012r2 上的 Docker

Python Tkinter 使用键盘快捷键取消图标化撤回窗口

高分的android共享首选项示例?

linux - wxWidgets 从 linux 交叉编译到 windows - "--host="是什么意思?

c++ - DLL监控