49

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

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

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

感谢您的任何提示!

4

3 回答 3

24

遗憾的是,没有与 RPATH 直接类似的东西。有许多替代的可能性,每一种都可能以自己的特殊方式对你不利。

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

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

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

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

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

于 2008-10-23T16:31:56.757 回答
6

Windows 中 DLL 的搜索顺序在 MSDN上的此页面上进行了描述。如果您使用运行时动态链接,您可以在调用时指定文件夹LoadLibrary

于 2008-09-20T11:03:01.990 回答
5

“隔离应用程序”是一种嵌入描述 DLL 依赖关系的 XML 清单的机制。

于 2008-09-20T14:34:35.307 回答