可执行dll加载(x32,x64):选择正确的

Posted

技术标签:

【中文标题】可执行dll加载(x32,x64):选择正确的【英文标题】:Executable dll loading (x32, x64): pick the right one 【发布时间】:2009-04-02 09:26:39 【问题描述】:

我有一个包含多个第三方库的大型项目。我想为 32 和 64 位架构构建一切。几个库创建共享库 (dll)。将这些 dll 提供给我的项目中已编译的可执行文件的最佳方法是什么?我想我可以将所有这些 dll 放入一个添加到 PATH 变量的目录中。但是大多数从 3rd 方库创建的 dll 在 32 位和 64 位编译下都以相同的方式命名,所以我不能将它们放在一个目录中。我可以创建两个目录,一个用于 32 位 dll,一个用于 64 位 dll,并且可执行文件选择正确的 dll? 或者你有更好的主意让我的可执行文件加载正确的 dll 吗? 谢谢!

【问题讨论】:

【参考方案1】:

由于 32 位可执行文件无法选择 64 位 DLL,反之亦然。您只有一个目录包含所有 32 位(可执行文件 + DLL)和另一个包含所有 64 位的目录。

【讨论】:

【参考方案2】:

目标系统是 32 位或 64 位,绝不是两者。您应该根据系统的位数仅安装所需的版本。然后,您只需拥有两组不相交的二进制文件,并安装目标系统所需的一组,并且在运行时检测要加载的内容永远不会遇到问题。

【讨论】:

其实对于WOW来说,64位系统也是32位系统。但是你有一个 32 位和一个 64 位的 Program Files 目录,所以仍然没有混合。 是的,可执行文件的目标是 32 位或 64 位。但我希望能够在我们的开发机器上针对这两种架构(仅用于开发,而不是在“客户计算机”上)。 我想最好将编译后的 64 位可执行文件复制到一个文件夹中,然后将 32 位文件复制到另一个文件夹中。在几乎任何开发环境中设置它都是微不足道的,它完全解决了问题。

以上是关于可执行dll加载(x32,x64):选择正确的的主要内容,如果未能解决你的问题,请参考以下文章

读取 ntdll.dll + offset 会导致访问冲突

IDA Pro与x64dbg联动调试记录

.NET 并发集合可以用于进程间 x32 到/来自 x64 的通信吗?

修复:尝试加载格式不正确的程序[关闭]

什么叫静态库和动态库

无法加载文件或程序集“PcapDotNet.Core.dll”