在不同目录中的二进制文件之间共享公共dll

在不同目录中的二进制文件之间共享公共dll,dll,Dll,我有多个dll,位于不同的子目录中,它们依赖于另一个称为common.dll的第三方dll。我想设置这些dll,以便它们知道在哪里可以找到common.dll,而不使common.dll对其他程序可见,以避免冲突 例如: foo/bar.dll foo/bar/fubar.dll common/common.dll 同时使用bar.dll和fubar.dll,具体取决于common.dll 我有以下限制: 虽然我可以完全控制DLL,但我不能控制调用可执行文件,所以修改路径不是一个选项 它必

我有多个dll,位于不同的子目录中,它们依赖于另一个称为common.dll的第三方dll。我想设置这些dll,以便它们知道在哪里可以找到common.dll,而不使common.dll对其他程序可见,以避免冲突

例如:

  • foo/bar.dll
  • foo/bar/fubar.dll
  • common/common.dll
同时使用bar.dll和fubar.dll,具体取决于common.dll

我有以下限制:

  • 虽然我可以完全控制DLL,但我不能控制调用可执行文件,所以修改路径不是一个选项
  • 它必须在从XP到7的所有windows上运行
  • 我无法在windows使用的“已知”位置安装common.dll
  • 修改DLL代码以设置通过API的路径是不可取的
依我看,像我的DLL上的unix rpath+ORIGIN这样的东西将是理想的解决方案


我希望使用manifest会有所帮助,但它看起来非常复杂,或者对windows xp不可用。

假设您使用的是windows,我常用的方法是在某个目录中创建指向文件物理位置的符号链接。然后,调用者只需要知道一些“已知目录”,你把链接和windows神奇地重定向到正确的文件

实文件
c:\blah\common\xxx.dll

链接:
c:\MyDir\xxx.dll

现在调用者可以使用
c:\MyDir\xxx.dll
,他们可以访问
c:\blah\common\xxx.dll


windows上的语法是:
mklink c:\MyDir\xxx.dll c:\blah\common\xxx.dll

谢谢您的回答,但我无法将公共dll安装在“已知”目录中。对不起,我已重新表述了我的回答-我的话让人困惑。