error C2169: '_InterlockedAnd64' : intrinsic function, cannot be defined 急,在线等~

baishujunaaa 2015-07-07 02:21:56
>C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h(5423): error C2169: '_InterlockedAnd64' : intrinsic function, cannot be defined
编译一个工程,在win32下编译可以通过,切换到X64下就报了一大堆错,为首的是上面那个,google了一下也没有找到相关的解决办法,都是是和系统内部函数重命名了,但是我全局搜了一下函数名字,发现只用系统文件里有啊,自己写的文件都没有重名,so,只能发到网上求各位大神帮助拉~~~急,在线等!!!!先谢谢了~~
...全文
618 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
baishujunaaa 2015-07-07
  • 打赏
  • 举报
回复
终于解决了。我来总结一下哈。
问题:一个Solution中有两个Project,假设为A和B,B中用到了A里面的文件,然后在x64下编译会报上面的错误。
解决办法:如图就是在那个Preprocessor Definitions中加上_M_IA64。
总结:出现问题的时候有想过是工程的某个变量没有设置好,但是由于自己基础薄弱,最后还是请教了大神才解决了。感觉自己太小白了,恩~~要好好学习~~
最后,感谢以上各个楼层的朋友的帮忙哈~~~
baishujunaaa 2015-07-07
  • 打赏
  • 举报
回复
引用 7 楼 lovesmiles 的回复:
找一下看看有没有winsock的头文件。 我记得winsock的文件有二个版本,如果包含顺序不对,也会报这种错。 如果没有,就仔细找一下是谁引到winnt.h的,对比一下 #define InterlockedAnd64Acquire _InterlockedAnd64 这句代码,有没有被宏开关控制,找一下这个宏开关是怎么定义的,理一下头文件的顺序应该就可以了
真的是没有用到winSock 和 winnt.h 这两个 文件。我已经定位到一个文件 只要不使用他就可以了,但是还是没有研究出来为什么不能用,但是为什么win32就能编译过 改成X64 就不行了呢~头文件真是个神奇的东西
勤奋的小游侠 2015-07-07
  • 打赏
  • 举报
回复
找一下看看有没有winsock的头文件。 我记得winsock的文件有二个版本,如果包含顺序不对,也会报这种错。 如果没有,就仔细找一下是谁引到winnt.h的,对比一下 #define InterlockedAnd64Acquire _InterlockedAnd64 这句代码,有没有被宏开关控制,找一下这个宏开关是怎么定义的,理一下头文件的顺序应该就可以了
baishujunaaa 2015-07-07
  • 打赏
  • 举报
回复
引用 4 楼 lovesmiles 的回复:
两个windows的头文件有冲突了 把包含这个变量的头文件的顺序换一下。
可是是哪两个windows 头文件呢?我工程里没有显示引用到报错的winnt.h
baishujunaaa 2015-07-07
  • 打赏
  • 举报
回复
引用 1 楼 Saleayas 的回复:
这个指令在 _M_IA64 被定义时,被指示成是指令了。 是不可以被 #define 修改的。 而你工程中,可能使用了 #define 定义了这个。 试试使用宏屏蔽掉。
不过我发现在她报错的地方有几个#define 但是是系统文件 winnt.h #define InterlockedAnd64 _InterlockedAnd64 #define InterlockedAnd64Acquire _InterlockedAnd64 #define InterlockedAnd64Release _InterlockedAnd64 #define InterlockedAnd64NoFence _InterlockedAnd64
勤奋的小游侠 2015-07-07
  • 打赏
  • 举报
回复
两个windows的头文件有冲突了 把包含这个变量的头文件的顺序换一下。
Saleayas 2015-07-07
  • 打赏
  • 举报
回复
那里看看这个函数在哪里被定义了。这个函数是指令,不可以自己定义的。 x86 系统没有这个函数的,所以可能是宏定义,或者自己定义成函数,仅仅为了兼容。 x64 和 Arm 系统,都是指令。
baishujunaaa 2015-07-07
  • 打赏
  • 举报
回复
你是说 _InterlockedAnd64 在我项目里被#define 重定义了么??我全局搜了一下 没有啊
Saleayas 2015-07-07
  • 打赏
  • 举报
回复
这个指令在 _M_IA64 被定义时,被指示成是指令了。 是不可以被 #define 修改的。 而你工程中,可能使用了 #define 定义了这个。 试试使用宏屏蔽掉。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧