如何将 win32 应用程序迁移到 x64 应用程序?

Posted

技术标签:

【中文标题】如何将 win32 应用程序迁移到 x64 应用程序?【英文标题】:How could I migrate a win32 application to a x64 one? 【发布时间】:2017-12-06 08:10:41 【问题描述】:

最近我在 Visual Stuido 2015 中开发了一个面部识别应用程序。为了将 cuda 库应用到应用程序中,这个应用程序需要从 win32 类型迁移到 x64。在确保每个 extern dll 或 lib 都有其 x64 版本时,我仔细更改了配置管理器并调整了与 x86 相关的所有内容。

但是在release模式下编译后,总是报错:“LNK1112 module computer type 'x86' conflict target computer type 'x64'”。错误文件是由directshow 编写的CameraDS.obj。我用 dumpbin /headers 检查了生成的 .obj 文件,然后发现每个 .obj 的头文件值都是机器(x86)。删除这些 .obj 文件或只是清理解决方案不起作用,IDE 只会抛出相同的错误消息。我不知道为什么。

有什么解决办法吗?

【问题讨论】:

“CameraDS.obj 是由 directshow 编写的”是什么意思?如果它是一个外部 obj 那么也许你需要链接它的 64 位版本? 我的意思是CameraDS类是directshow写的,编译时CameraDS.obj存在。 【参考方案1】:

它是 lib CameraDS.obj 的来源吗? https://github.com/souseiki/Stereo-Vision

只需为 x64 重新编译它。

还要检查你没有把x86留在任何地方,看看fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'的答案

【讨论】:

是的。但是我发现不仅CameraDS类产生了x86 .obj,即使我清理了这些.obj文件,任何其他类都有相同的变化。在问之前,我已经在那个问题中一一检查了可能的故障。我重建了一个 x64 项目并复制了所有代码并解决了问题,但我仍然想知道为什么。 如果您的项目文件仍然有错误,您可以将 .vcxproj 文件作为文本打开并在其中查找 x64,它一定是某个地方的某些设置。 你的意思是.vcxproj文件在以项目命名的文件下?它是由 x86 和 x64 版本共享的吗?我打开它,发现许多带有 win32 和 x64 的内容。我尝试在我的新项目中将 x64 迁移到 x86,当编译器生成 .obj 文件时出现更多错误消息... 是的,这个文件。它包含 win32 和 x64 的设置,因此您只需检查 x64 和 common 部分。 我在 中发现一行包含这些 $(VCInstallDir)bin;$(VCInstallDir)\bin\x86_amd64;$(WindowsSdkDir)bin\NETFX 4.0 Tools;$(WindowsSdkDir) bin;$(VSInstallDir)Common7\Tools\bin;$(VSInstallDir)Common7\tools;$(VSInstallDir)Common7\ide;$(ProgramFiles)\html Help Workshop;$(FrameworkSDKDir)\bin;$(MSBuildToolsPath32);$ (VSInstallDir);$(SystemRoot)\SysWow64;$(FxCopDir);$(PATH);$(ExecutablePath) 有影响吗?好吧,我将原始文件与我的新项目进行比较,发现有些不同,但它们不包含 win32 或 x86。

以上是关于如何将 win32 应用程序迁移到 x64 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

将 oracle 客户端从 win7/32 迁移到 win10/64

你如何为x64编译静态pthread-win32 lib?

在 32 位 win7 上部署 Qt 应用程序 - 在 Win7 x64 上工作(和编译)

将桌面桥 UWP 应用与 Win32 应用正确打包

VHD安装的Win7 X64系统迁移到VMware虚拟机(P2V)...

Visual Studio、Windows 7 x64 中的“生成 Win32 资源时出错”