LNK2005:_wmemcmp 重复定义,及C4799:没有EMMS指令

来源:互联网 发布:厦门关键词优化 编辑:程序博客网 时间:2024/06/05 06:14
最近在ARM平台上做一个C++项目,其中有一部分与硬件关系不大,想用Visual C++ 2010来做单步调试平台来提高开发效率,将Ubuntu的/usr/include中的所有头文件搞到了Windows的目录中,然后禁用或修改了其中与Linux特性相关的部分,编译了一个测试用例并调试成功,于是推而广之,此时,悲剧发生鸟。
...
2>xxx.obj : error LNK2005: _wmemcmp 已经在 aa.obj 中定义
2>xxx.obj : error LNK2005: _wmemcpy 已经在 aa.obj 中定义
2>xxx.obj : error LNK2005: _wmemmove 已经在 aa.obj 中定义
2>xxx.obj : error LNK2005: _wmemset 已经在 aa.obj 中定义
2>xxx.obj : error LNK2005: __mm_cvtpi32x2_ps 已经在 aa.obj 中定义
...
3>c:\program files\microsoft visual studio 10.0\vc\include\xmmintrin.h(386): warning C4799: 函数“_mm_cvtpi16_ps”没有 EMMS 指令
3>c:\program files\microsoft visual studio 10.0\vc\include\xmmintrin.h(405): warning C4799: 函数“_mm_cvtpu16_ps”没有 EMMS 指令
3>c:\program files\microsoft visual studio 10.0\vc\include\xmmintrin.h(436): warning C4799: 函数“_mm_cvtpi8_ps”没有 EMMS 指令
3>c:\program files\microsoft visual studio 10.0\vc\include\xmmintrin.h(451): warning C4799: 函数“_mm_cvtpu8_ps”没有 EMMS 指令
3>c:\program files\microsoft visual studio 10.0\vc\include\xmmintrin.h(481): warning C4799: 函数“_mm_cvtpi32x2_ps”没有 EMMS 指令
...


参考网上的做法,链接器先上了/FORCE:MULTIPLE大餐,解决了_wmemcmp已经在aa.obj中定义之类的错误。然而,很不甘心呐,测试用例没有这样的错误啊,为什么啊?……


好奇心驱使下,祭出代码逐段注释大法,一段一段注释掉头文件,最后发现禁止#include <unistd.h>时没有问题,呵呵,以为找到了恶作剧的小精灵。悲哀地是,
添加如下代码,
#ifndef WIN32
#include <unistd.h>
#endif
仅仅解决了LNK2005:_wmemcmp 重复定义的问题,“没有EMMS指令”的链接警告依旧。行百里者九十,咱耗上了,继续……


若干次测试之后,发现如下解决方案:
#ifdef   WIN32
#include <memory>
#include <WinSock2.h>
#include <Windows.h>
#endif


编译,输出窗口干干净净 ^-^
0 0
原创粉丝点击