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

61 篇文章 0 订阅
58 篇文章 0 订阅
最近在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> /*PS:unistd.h之前必须有memory.h头文件,否则有报告没有EMMS指令warning()*/
#include <unistd.h> /*c:\...\vc\include\xmmintrin.h(386): warning C4799: 函数“_mm_cvtpi16_ps”没有 EMMS 指令*/
#endif


编译,输出窗口干干净净 ^-^

这个warning是由unistd.h的兼容性引入的,有时间研究一下memory中做了什么。


这个warning是由unistd.h的兼容性引入的,有时间研究一下memory中做了什么。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值