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

时间:2020-03-06 14:28:55  来源:igfitidea点击:

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

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

我的情况:我想根据共享库的属性(32 / 64bit / Debug / Release)将共享库放置在不同的位置,而不必考虑唯一的名称。在Linux上,可以通过rpath轻松完成此操作,但是我还没有找到在Windows上执行此操作的任何方法。

感谢提示!

解决方案

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

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

遗憾的是,没有RPATH的直接类似物。有多种选择,每种选择都有可能以我们自己的特殊方式对我们不利。

鉴于每种生成方式都需要一个不同的exe以避免运行时库冲突,因此我们可能会想到,最简单的方法是将每个exe与每个DLL组放在同一文件夹中。

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

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

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

如果我们愿意更改每种exe风格的文件名,则可以使用"应用程序路径"注册表项。每个exe需要一个唯一的文件名。