我正在开发一个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冲突 "
任何想法和建议都非常感谢!
谢谢,Keerti Somasundaram
我可以在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文件).在"输入"选项卡上,有一个"附加依赖项"字段.对于所有平台,其中的任何条目应该相同(除非使用不同的文件名来区分x86和x64文件).
另一个要检查的地方是工具| 选项| 项目和解决方案| VC++目录.这些设置列出了搜索特定类型文件的各种目录.每个平台都有单独的列表.在您的情况下,您需要检查"库文件"列表.对于x64平台,您需要确保"库文件"列出指定包含x64版本库文件的目录.