2023年6月21日发(作者:)

vs2010编译项⽬,intrin.h和winNT.h冲突的问题解决⼀,问题描述

本⼈最开始⽤的是vs2005,后来由于做⼿机开发,⼜安装了vs2008,这时候,项⽬中的某些⽂件出现编译错误,后来经过研究,发现原因是:Platform SDK安装到了vs2005的安装⽬录中,vs2008的项⽬包含路径中没有包含platfor SDK的include⽂件。没说的,⾃⼰果断加上,解决问题。

后来,由于公司的要求,⼜要使⽤vs2010,所以,电脑上⼜安装了vs2010,编译项⽬,出现编译错误:“不允许重载函数“_interlockedbittestandreset”的第⼆个 C 链 ”,经过⽹上搜索,发现原因是,由于安装vs2010的时候,⾃动包含了vs2008中的项⽬包含⽬录作为⽗继承,所以把安装在vs2005中的platform SDK继承下来了。_interlockedbittestandreset函数的定义在platform SDK中的winNT.h和Windows SDK中的winNT.h都有定义。这样,项⽬中⽤到的intrin.h⽂件在调⽤_interlockedbittestandreset函数的时候,就发⽣了两个SDK的冲突。

⼆,解决办法

1,vs2010的项⽬VC++的包含⽬录中添加Windows SDK的Include⽬录。(注意要放到最前的位置,否则可能会出错误:

1>c:program filesmicrosoft sdkswindowsv7.0aincludeobjidl.h(11280): error C2061: 语法错误: 标识符“__RPC__out_xcount_part”

1>c:program filesmicrosoft sdkswindowsv7.0aincludeobjidl.h(11281): error C2059: 语法错误:“)”

1>c:program filesmicrosoft sdkswindowsv7.0aincludeobjidl.h(11281): fatal error C1903: ⽆法从以前的错误中恢复;正在停⽌编译)

2,打开⽬录编辑,去掉旧的platform SDK包含⽬录

1)打开⽬录C:Documents and SettingsAdministratorLocal SettingsApplication DataMicrosoftMSBuildv4.0中的⽂件

2)$(IncludePath);$(DXSDK_DIR)Include;$(EMERGENT_PATH)include;$(PHYSXINSTALLPATH)sdksPhysicsinclude⾥去掉旧的platfrom SDK的include⽬录。

重新编译,搞定!

三,总结

类似的这个错误:

1>c:program filesmicrosoft sdkswindowsv7.0aincludeobjidl.h(11280): error C2061: 语法错误: 标识符“__RPC__out_xcount_part”

1>c:program filesmicrosoft sdkswindowsv7.0aincludeobjidl.h(11281): error C2059: 语法错误:“)”

1>c:program filesmicrosoft sdkswindowsv7.0aincludeobjidl.h(11281): fatal error C1903: ⽆法从以前的错误中恢复;正在停⽌编译

原因:

Windows SDK和其它库(如DirectX等)出现冲突。

解决⽅法如下:

把WindowsSDK的包含⽬录放在最前!

操作:在项⽬上单击右键—》属性—》配置属性—》VC++⽬录,修改“包含⽬录”,把 $(WindowsSdkDir)include 放在最前。重新编译,搞定!

2023年6月21日发(作者:)

vs2010编译项⽬,intrin.h和winNT.h冲突的问题解决⼀,问题描述

本⼈最开始⽤的是vs2005,后来由于做⼿机开发,⼜安装了vs2008,这时候,项⽬中的某些⽂件出现编译错误,后来经过研究,发现原因是:Platform SDK安装到了vs2005的安装⽬录中,vs2008的项⽬包含路径中没有包含platfor SDK的include⽂件。没说的,⾃⼰果断加上,解决问题。

后来,由于公司的要求,⼜要使⽤vs2010,所以,电脑上⼜安装了vs2010,编译项⽬,出现编译错误:“不允许重载函数“_interlockedbittestandreset”的第⼆个 C 链 ”,经过⽹上搜索,发现原因是,由于安装vs2010的时候,⾃动包含了vs2008中的项⽬包含⽬录作为⽗继承,所以把安装在vs2005中的platform SDK继承下来了。_interlockedbittestandreset函数的定义在platform SDK中的winNT.h和Windows SDK中的winNT.h都有定义。这样,项⽬中⽤到的intrin.h⽂件在调⽤_interlockedbittestandreset函数的时候,就发⽣了两个SDK的冲突。

⼆,解决办法

1,vs2010的项⽬VC++的包含⽬录中添加Windows SDK的Include⽬录。(注意要放到最前的位置,否则可能会出错误:

1>c:program filesmicrosoft sdkswindowsv7.0aincludeobjidl.h(11280): error C2061: 语法错误: 标识符“__RPC__out_xcount_part”

1>c:program filesmicrosoft sdkswindowsv7.0aincludeobjidl.h(11281): error C2059: 语法错误:“)”

1>c:program filesmicrosoft sdkswindowsv7.0aincludeobjidl.h(11281): fatal error C1903: ⽆法从以前的错误中恢复;正在停⽌编译)

2,打开⽬录编辑,去掉旧的platform SDK包含⽬录

1)打开⽬录C:Documents and SettingsAdministratorLocal SettingsApplication DataMicrosoftMSBuildv4.0中的⽂件

2)$(IncludePath);$(DXSDK_DIR)Include;$(EMERGENT_PATH)include;$(PHYSXINSTALLPATH)sdksPhysicsinclude⾥去掉旧的platfrom SDK的include⽬录。

重新编译,搞定!

三,总结

类似的这个错误:

1>c:program filesmicrosoft sdkswindowsv7.0aincludeobjidl.h(11280): error C2061: 语法错误: 标识符“__RPC__out_xcount_part”

1>c:program filesmicrosoft sdkswindowsv7.0aincludeobjidl.h(11281): error C2059: 语法错误:“)”

1>c:program filesmicrosoft sdkswindowsv7.0aincludeobjidl.h(11281): fatal error C1903: ⽆法从以前的错误中恢复;正在停⽌编译

原因:

Windows SDK和其它库(如DirectX等)出现冲突。

解决⽅法如下:

把WindowsSDK的包含⽬录放在最前!

操作:在项⽬上单击右键—》属性—》配置属性—》VC++⽬录,修改“包含⽬录”,把 $(WindowsSdkDir)include 放在最前。重新编译,搞定!