【问题标题】:Converting a 32 bit unmanaged VC++ project to 64 bit将 32 位非托管 VC++ 项目转换为 64 位
【发布时间】:2011-07-14 23:09:53
【问题描述】:

我正在使用 32 位环境。我有一个包含一组 C# 项目和一组 VC++ 非托管项目的解决方案。对于所有 C# 项目构建平台都设置为“任何 CPU”,对于 VC++ 项目,它是 Win32。我们正在迁移到 64 位平台。 现在我的问题是

1) 我可以在 32 位环境 中将我的 32 位 VC++ Dll 转换为 64 位吗?

2) 是否有一种方法可以将 VC++ 项目的平台也设置为“任何 CPU”之类的东西?

3) 我在 VS2008 的 Build 菜单下打开了 Configuration Manager。将 Active Solution 平台设置为 Any CPU(我没有将其更改为之前仅设置为该平台),然后我将 VC++ 项目的平台设置为 X64。现在我清理了解决方案并尝试重新构建解决方案。 VC++ 项目没有构建,因此引用 VC++ 项目的 C# 项目也没有构建。我尝试独立构建 VC++ 项目,但出现此错误:“致命错误 LNK1112:模块机器类型 X86 与目标机器类型 x64 冲突

非常感谢任何想法和建议!

谢谢, 科尔蒂·索马桑达拉姆

【问题讨论】:

  • 如果您没有要测试的 64 位机器,请不要尝试移植到 64 位。

标签: visual-c++


【解决方案1】:

我可以在我的 32 位环境中将我的 32 位 VC++ Dll 转换为 64 位吗?

如果您有可用的 64 位编译器(某些版本的 Visual Studio 不包含 64 位编译器等),您当然可以使用 32 位系统为 64 位系统编译代码。由于您能够将目标平台设置为 x64 并编译您的代码,因此听起来您确实有可用的编译器。

如果您在 32 位系统上进行编译,则测试和调试会更加困难。显然你必须在 x64 系统上运行你的测试,所以现在你不得不使用远程调试器。

是否有办法为 VC++ 项目设置平台 也适用于“任何 CPU”之类的东西?

这对于原生 C++ 来说真的没有意义。本机代码 dll 绝对是 32 位或 64 位代码文件。托管代码可以支持“任何 CPU”,因为 JIT 负责将 IL 编译为实际的平台操作码,因此它可以适当地转换为 x86 或 x64。

VC++ 项目没有建立

使用构建菜单的配置管理器命令检查您的构建配置。您可能会发现配置中有一个适用于 x64 平台的 VC++ Dll 项目的条目,但未选中 Build 复选框。

致命错误 LNK1112:模块机器类型 X86 与目标冲突 机器类型 x64

链接器告诉您链接文件的目标是 x64(这是您想要的),但是输入到链接器的模块(文件)是为 x86 构建的,因此它与该目标冲突。你如何解决这个问题取决于模块是什么。

如果您在编译项目的一个 cpp 文件创建的 obj 文件时遇到此错误,那么问题是您的项目正在为 x86 而不是 x64 编译该 cpp 文件。

对于链接到您的项目的 LIB 文件(或其他文件),您更有可能收到此错误 - 例如来自某些 SDK 的 LIB 文件。在这种情况下,修复可能是更改项目属性,以便您使用正确的(即 x64)LIB 文件。一些 SDK 对 32 位和 64 位版本的 LIB 文件使用不同的文件名。其他人对 LIB 文件使用相同的名称,但将 x86 和 x64 版本存储在不同的目录中。

开始寻找的好地方是 Project |属性 |链接器。在常规选项卡上有一个“附加库目录”字段。那里的任何条目都应该指向 x86 和 x64 平台的不同目录(除非使用特定目录来保存 x86 和 x64 文件)。在 Input 选项卡上有一个“Additional Dependencies”字段。对于所有平台,其中的任何条目都应该相同(除非使用不同的文件名来区分 x86 和 x64 文件)。

另一个检查的地方是工具 |选项 |项目和解决方案 | VC++ 目录。这些设置列出了搜索某些类型文件的各种目录。每个平台都有单独的列表。在您的情况下,您需要检查“库文件”列表。对于 x64 平台,您需要确保“库文件”列出包含 x64 版本库文件的指定目录。

【讨论】:

    【解决方案2】:

    就自己解决这个问题而言,我发现以下链接非常有用。

    http://msdn.microsoft.com/en-us/library/9yb4317s.aspx

    对我来说,我试图将 32 位 VC++ VS2010 应用程序转换为 64 位应用程序。

    我遇到了诸如

    之类的错误

    链接警告 lnk4068 /machine 未指定默认为 x86

    致命错误 lnk1112 模块机器类型“x86”与目标冲突 机器类型“x64”

    我听从了其他各种网站的建议,但需要有关目标 /MACHINE 设置的信息。

    对我来说,设置它是一种享受:

    项目设置\配置属性\图书馆员\常规\目标机器

    旧值:空白(默认为 x86) 新值:MachineX64 (/MACHINE:X64)

    希望这对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-01-31
      • 1970-01-01
      • 2011-01-05
      • 2019-05-20
      • 2021-01-22
      • 2014-09-11
      • 1970-01-01
      • 2010-11-03
      相关资源
      最近更新 更多