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

44 windows dll shared rpath

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

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

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

谢谢你的任何提示!

kbl*_*uck 22

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

鉴于您无论如何都需要为每个构建版本使用不同的exe来避免运行时库冲突,因为您可能认为最简单的方法是将每个exe放在与每组DLL相同的文件夹中.

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

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

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

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


Ada*_*itz 7

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

  • @Christian:您的 Wiki 定义是针对 .NET 程序集的,当然,它仅受管理。但程序集不一定是 .NET 程序集。Windows 上的程序集实际上只不过是可执行映像和描述它的 XML 文件的配对,并且它肯定也适用于非托管代码。:) (4认同)

Chr*_*isN 5

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