在Linux / GCC上,我可以使用-rpath标志来更改共享库的可执行文件searchpath,而不用使用环境variables。
这也可以在Windows上完成吗? 据我所知,dll总是在可执行文件的目录和PATH中search。
我的场景:我想根据它们的属性(32 / 64bit / Debug / Release)将共享库放入位置,而不必考虑唯一的名称。 在Linux上,这很容易通过rpath完成,但我还没有find任何方式在Windows上做这个。
感谢任何提示!
可悲的是,没有直接类比RPATH。 有很多其他的可能性,他们每个人都可能以自己特殊的方式对你不利。
考虑到你需要一个不同的exe文件来避免运行库冲突,所以你可能会猜到最简单的做法就是把每个exe文件放在同一个文件夹中。
正如你所提到的,最通用的方法是通过使用批处理文件来引导exe文件来改变PATH变量。
在运行程序到所需的DLL文件夹之前,您可以改变当前的工作目录。
你可以在你的exe文件中使用SetDllDirectory或AddDllDirectory函数。 这可能是最接近RPATH,但只适用于WinXP SP1或更高版本。
如果您愿意更改每个exe文件的文件名称,可以使用“App Paths”注册表项。 每个exe都需要一个唯一的文件名。
Windows中DLL的搜索顺序在MSDN上的这个页面上描述。 如果使用运行时动态链接 ,则可以在调用LoadLibrary
时指定文件夹。
“独立应用程序”是一种嵌入描述DLL依赖关系的XML清单的机制。