博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【问题解决记录】无法识别的标志“-sdlMode”,在“p2”中
阅读量:6227 次
发布时间:2019-06-21

本文共 1196 字,大约阅读时间需要 3 分钟。

本文为大便一箩筐的原创内容,转载请注明出处,谢谢:

这是本人第一次使用MarkDown编辑器,试试看效果—w—,下面是正文:


一、报错原因

昨天用SIMD指令编写了几个矩阵计算函数,想要替换掉DX的函数达到优化性能的目的。

因为公司项目使用的编译器是VS2008,而VS2013编译出来的SIMD指令效率优于VS2008,所以我便想在VS2008中使用VS2013编译的库,结果导入后链接过程报错:

fatal error C1007: 无法识别的标志“-sdlMode”,在“p2”中

在网上查询了一下,虽然没有找到直接的解决方案,不过大概知道了这是因为编译库文件的编译器版本不同导致的报错。

sdl是cl编译器的一个参数,具体可以查阅MSDN:
而VS2008版本的编译器没有定义sdl参数,所以当使用VS2008链接VS2013编译的lib文件时,会导致链接失败

二、解决方案

方案一 使用VS2008把想要导入的库重新编译

这个方法简单直接,不过它违背了我最初使用这个库的初衷,所以直接Pass掉

方案二 修改VS2013的编译参数,重新编译想要导入的库

这个方案也很好理解,因为VS2008不能识别"/sdl"参数,所以在用VS2013编译库的时候把这个参数删掉就好了,具体操作方法如下:

项目 -> 属性 -> 配置属性 -> C/C++ -> 常规 -> SDL检查,删除此项参数,再重新编译即可

三、其他问题

“P1”和“P2”之间Il不匹配

解决了上述报错后,再重新用VS2008编译公司的项目,又有了新的报错:

“P1”和“P2”之间Il不匹配

这个问题产生的原因也是编译器版本不匹配导致的,网上相关的资料很多,在此就不废话了

解决方法也很简单:只需要在编译库的时候关闭编译器的“全程序优化”和“链接时代码生成”选项即可

warning C4099 找不到vc120.pdb,如同没有调试信息一样

这是一个链接警告,由于VS2008生成的调试文件为vc90.pdb,与VS2013的版本不符合,所以在VS2008中使用VS2013编译的lib文件会产生上述警告

解决方法是在库编译完后,将Release中间文件夹中的vc120.pdb拷贝出来,和lib文件放在同一目录导入到VS2008的工程中,或者直接放到VS2008工程的目标目录(即生成的exe所在目录),就不会产生上述警告了

编译Debug版本的exe后,程序打开时弹窗报错 R6034

这个错误产生的原因是因为debug版本使用了release版的lib文件,导致客户端使用了错误版本的CRT(C++ RunTime,C++运行时库),使用VS2013编译一个debug版本的lib,再导入到VS2008的工程即可

转载于:https://www.cnblogs.com/dbylk/p/5133739.html

你可能感兴趣的文章
mysql双机热备的实现
查看>>
前加绩中国、信雅达高级全栈工程师:吴劲松
查看>>
-bash: pod: command not found 解决办法
查看>>
GCD hdu1695容斥原理
查看>>
Node.js:回调函数
查看>>
python 发送邮件 <QQ+腾讯企业邮箱>
查看>>
细数JDK里的设计模式
查看>>
Linux~上部署.net MVC出现的问题与解决
查看>>
DDD~充血模型和失血模型
查看>>
android DPI与分辨率的关系及计算方式
查看>>
forward_list
查看>>
伪分布式网络爬虫框架的设计与自定义实现(一)
查看>>
解决npm ERR! Unexpected end of JSON input while parsing near的方法汇总
查看>>
MySQL 入门
查看>>
js的操作及css样式
查看>>
bootstrapValidator关于js,jquery动态赋值不触发验证(不能捕获“程序赋值事件”)解决办法...
查看>>
数据库设计基础>范式
查看>>
POJ 3461 Oulipo(模式串在主串中出现的次数)
查看>>
Openstack的镜像属性
查看>>
【分享】用Canvas实现画板功能
查看>>