【发布时间】:2009-12-11 04:57:24
【问题描述】:
我正在编译一个针对 x86-64 的 .NET 应用程序;但是,应用程序引用了 32 位 dll。可执行文件可以正常编译,但 Visual Studio 会抛出警告:
引用的组件 'path/to/dll' 针对与应用程序不同的处理器。
现在,我的理解是,您不能简单地将 64 位可执行文件链接到 32 位共享库。 .NET(或 Windows?)使用什么黑魔法来实现这一点?
当应用程序针对 x86 和 x86-64 构建时,我注意到内存占用量存在相当大的差异。当 32 位 dll 被动态加载并开始处理时,64 位应用程序的内存占用量将比应用程序构建为 32位应用程序。只有当 dll 中的某个代码路径被命中时,这种差异才会如此之大,但是不幸的是,我无法查看 dll 来查看内部结构。
64 位二进制文件如何链接到 32 位共享库? 32 位 ABI 不会阻止这种情况吗?
为什么应用程序编译为 x86-64 架构时内存占用会有如此大的差异?
任何其他信息来解释这一点将不胜感激。
【问题讨论】:
标签: .net dll linker shared-libraries