将32位非托管vc++项目转换为64位



我在32位环境下工作。我有一个解决方案,包含一组c#项目和一组vc++非托管项目。对于所有c#项目的构建平台都设置为"任意CPU",对于vc++项目,它是Win32。我们正在向64位平台迁移。现在我的问题是

1)我可以转换我的32位vc++ dll到64位在我的32位环境 ?

2)是否有办法将vc++项目的平台也设置为"任意CPU"?

3)我在VS2008的构建菜单下打开了配置管理器。将活动解决方案平台设置为任意CPU (,我没有更改之前设置为仅为),然后将vc++项目平台设置为X64。现在我清理了解决方案,并试图重建解决方案。vc++项目没有被构建,因此引用vc++项目的c#项目也没有被构建。我尝试独立构建vc++项目,我得到了这个错误:"致命错误LNK1112:模块机器类型X86与目标机器类型x64冲突"

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

谢谢,

我可以在32位环境中将32位vc++ dll转换为64位吗?

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

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

是否有办法为vc++项目设置平台还有"Any CPU" ?

对于原生c++来说没有意义。本机代码dll肯定是32位或64位代码文件。托管代码可以支持"任何CPU",因为JIT负责将IL编译成实际的平台操作代码,因此它可以根据需要转换为x86或x64。

vc++项目没有被构建

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

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

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

如果你在编译一个项目的cpp文件时得到这个错误,那么问题是你的项目正在为x86而不是x64编译cpp文件。

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

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

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

为了解决这个问题,我发现下面的链接非常有用。

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

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

我得到错误,如

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

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

我遵循了其他各种网站的建议,但需要关于目标/机器设置的信息。

对我来说,设置这个很有效:

Project Settings Configuration Properties Librarian General Target Machine

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

最新更新