>C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h(5423): error C2169: “”_InterlockedAnd64″” : intrinsic function, cannot be defined |
|
20分 |
这个指令在 _M_IA64 被定义时,被指示成是指令了。
是不可以被 #define 修改的。 而你工程中,可能使用了 #define 定义了这个。 试试使用宏屏蔽掉。 |
你是说 _InterlockedAnd64 在我项目里被#define 重定义了么??我全局搜了一下 没有啊
|
|
那里看看这个函数在哪里被定义了。这个函数是指令,不可以自己定义的。
x86 系统没有这个函数的,所以可能是宏定义,或者自己定义成函数,仅仅为了兼容。 x64 和 Arm 系统,都是指令。 |
|
20分 |
两个windows的头文件有冲突了
把包含这个变量的头文件的顺序换一下。 |
不过我发现在她报错的地方有几个#define 但是是系统文件 winnt.h |
|
可是是哪两个windows 头文件呢?我工程里没有显示引用到报错的winnt.h |
|
找一下看看有没有winsock的头文件。
我记得winsock的文件有二个版本,如果包含顺序不对,也会报这种错。 如果没有,就仔细找一下是谁引到winnt.h的,对比一下 #define InterlockedAnd64Acquire _InterlockedAnd64 这句代码,有没有被宏开关控制,找一下这个宏开关是怎么定义的,理一下头文件的顺序应该就可以了 |
|
真的是没有用到winSock 和 winnt.h 这两个 文件。我已经定位到一个文件 只要不使用他就可以了,但是还是没有研究出来为什么不能用,但是为什么win32就能编译过 改成X64 就不行了呢~头文件真是个神奇的东西 |
|
终于解决了。我来总结一下哈。
问题:一个Solution中有两个Project,假设为A和B,B中用到了A里面的文件,然后在x64下编译会报上面的错误。 解决办法:如图就是在那个Preprocessor Definitions中加上_M_IA64。 总结:出现问题的时候有想过是工程的某个变量没有设置好,但是由于自己基础薄弱,最后还是请教了大神才解决了。感觉自己太小白了,恩~~要好好学习~~ 最后,感谢以上各个楼层的朋友的帮忙哈~~~ |