在Linux / GCC上我可以使用-rpath标志来更改共享库的可执行文件搜索路径,而不需要使用环境变量进行调整。
这可以在Windows上完成吗?据我所知,dll总是在可执行文件的目录和PATH中搜索。
我的场景:我想根据属性(32 / 64bit / Debug / Release)将共享库放入位置,而不需要处理唯一的名称。在Linux上,这很容易通过rpath完成,但我还没有找到任何方法在Windows上这样做。
感谢任何提示!
答案 0 :(得分:21)
可悲的是,RPATH没有直接的类比。有许多替代的可能性,每一种都可能以你自己特殊的方式对你不利。
鉴于你需要为每个构建版本使用不同的exe来避免运行时库冲突,你可能会猜到最简单的事情是将每个exe放在与每组DLL相同的文件夹中。
正如您所提到的,最通用的方法是通过使用批处理文件来引导exe来更改PATH变量。
您可以在将程序运行到所需的DLL文件夹之前更改当前工作目录。
您可以在exe内使用SetDllDirectory或AddDllDirectory功能。这可能是最接近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清单的机制。