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

时间:2008-09-20 10:58:54

标签: windows dll shared rpath

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

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

我的场景:我想根据属性(32 / 64bit / Debug / Release)将共享库放入位置,而不需要处理唯一的名称。在Linux上,这很容易通过rpath完成,但我还没有找到任何方法在Windows上这样做。

感谢任何提示!

3 个答案:

答案 0 :(得分:21)

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

鉴于你需要为每个构建版本使用不同的exe来避免运行时库冲突,你可能会猜到最简单的事情是将每个exe放在与每组DLL相同的文件夹中。

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

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

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

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

答案 1 :(得分:4)

Windows上的DLL搜索顺序在MSDN上的this page中有所描述。如果您使用的是run-time dynamic linking,则可以在致电LoadLibrary时指定该文件夹。

答案 2 :(得分:3)

"Isolated applications"是一种嵌入描述DLL依赖关系的XML清单的机制。