模块计算机类型“X86”与目标计算机类型“X64”冲突的原因分析与解决方案

这个问题的对立问题就是“模块计算机类型“X64”与目标计算机类型“X86”冲突”,这个问题的解决方法文章后面再说

这两个问题看起来很像,解决方法却大相径庭,很多博客都把两者混淆,解决不了问题

原因分析

首先来看题目中这个问题出现的原因,模块计算机类型“X86”是指计算机当前调用的库(lib或dll文件)的位数是32位,目标计算机类型“X64”是指当前的编译平台环境为64位,两者不相符,故冲突

模块计算机类型“X86”与目标计算机类型“X64”冲突的解决方法

这个问题一般出现在想生成64位解决方案时,因为平台选的64位,很明显是想得到64位解决方案。网上很多博主给出的解决方案是调整VS平台环境为64位,我看到时的内心就是:???excuse me?? ,因为报错已经说了目标计算机类型“X64”,很明显平台是64位的没有问题,不用调整,除非想生成的是32位解决方案,可以改为win32环境。

平台没有问题,剩下就是模块计算机类型“X86”的问题,如果在VS上运行,可以具体看下报错的文件名字,比如我在构建Halide时报错,出错的文件是“llvmObject.lib”文件,就是这个文件是32位的,llvm我是在cmd编译源码安装的,所以就是我在编译llvm时系统默认生成的是32位库文件,导致在llvm基础上编译Halide时报错。

找到原因,就可以对症解决了,重新编译llvm生成64位库文件,cmd中,如果用 

cmake -G "Visual Studio 14 Win64"

编译时,认真看的话,会发现编译最开始有句话提示,大概意思就是“由于未选择64位还是32位,系统将默认编译32位,如果想编译64位请在cmd 命令行中添加 -Thost=x64”,按照这个提示,这次用下面这句编译

cmake -Thost=x64 -G "Visual Studio 14 Win64"

可以看到这次调用就是amd64文件夹内的内容,生成64位库文件,问题就得到解决!


模块计算机类型“X64”与目标计算机类型“X86”冲突的解决方法

这个问题,相对容易解决,库没有问题,把平台改为x64就好,这个解决方案网上很多大概就是:

1、“链接器-》高级-》目标计算机”设置为"MachineX64 (/MACHINE:X64)"

2、“链接器-》命令行-》其他选项”设置为" /machine:X64 /debug "

3、“生成-》配置管理器-》活动解决方案平台”设置为" X64 ",如果没有就新建。

猜你喜欢

转载自blog.csdn.net/wgx571859177/article/details/80453649
今日推荐