【问题解决记录】无法识别的标志“-sdlMode”,在“p2”中

摘要:
因为公司项目中使用的编译器是VS2008,而VS2013编译的SIMD指令比VS2008更高效,所以我想在VS2008中使用VS2013编译过的库。因此,在导入:˃fatalerrorC1007:无法识别的标志“-sdlMode”之后,在链接过程中报告了一个错误。我在“p2”中在线搜索,没有找到直接的解决方案,但是,我可能知道这个错误是由编译库文件的不同编译器版本引起的。

本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/


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



## 一、报错原因 昨天用SIMD指令编写了几个矩阵计算函数,想要替换掉DX的函数达到优化性能的目的。 因为公司项目使用的编译器是VS2008,而VS2013编译出来的SIMD指令效率优于VS2008,所以我便想在VS2008中使用VS2013编译的库,结果导入后链接过程报错: > fatal error C1007: 无法识别的标志“-sdlMode”,在“p2”中

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

sdl是cl编译器的一个参数,具体可以查阅MSDN: [/sdl(启用附加安全检查)](https://msdn.microsoft.com/zh-cn/library/jj161081.aspx)
而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的工程即可

免责声明:文章转载自《【问题解决记录】无法识别的标志“-sdlMode”,在“p2”中》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇简单自定义控件在view下可以运行在传统模式下运行显示空白OpenCv 011---像素归一化下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【linux】【qt5】【将linux下的qt程序打包发布(完全适用于中标麒麟)】

前言: 最近因项目需求,需要打包linux-qt程序给客户先用一下子。百度一大堆终于找了几个靠谱的来综合一下,留为备用吧。 由于是先遣版所以仅制作为免安装程序的格式。 正文: 博主的qt是5.9.2的,程序名称为ocs,下面看到这个名称替换成自己的就是了。 1.先找个地方,比如桌面创建一个名字为OCS的空文件夹用于放打包后的文件。 2.将项目使用Relea...

Linux下安装mysql

Linux下安装mysql1.下载安装包 到mysql官网下载mysql编译好的二进制安装包,在下载页面Select Platform:选项选择linux-generic,然后把页面拉到底部,64位系统下载Linux - Generic (glibc 2.5) (x86, 64-bit),32位系统下载Linux - Generic (glibc 2.5)...

基础面试题

1. 为什什么学习Python? Life is short, You need Python 2. 通过什什么途径学习的Python? pass 3. Python和Java、PHP、C、C#、C++等其他语⾔言的对比? pass 4. 简述解释型和编译型编程语言? 将由高级语言编写的程序文件转换为可执行文件(二进制的)有两种方式,编译和解释,编译是在...

使用Android Studio时so文件打包不到APK中

1,需要在build中添加如下配置,这是必备的 Android {   sourceSets {       main {           jniLibs.srcDirs = ['libs']       }   }} 2,如果添加了该项配置出现了问题可能原因是引用了第三方包引起 比如我这边引用了xutils这个包,因为该包中也有一个.so的文件lib...

001.TypeScript简介.md

TypeScript是一门开源的,由微软开发维护的,发布于2012年10月的静态类型的语言; 他是ECMAScript的超集,支持JavaScript的所有语法和语义,并且在此基础之上提供了更多额外的特性,例如静态类型和更丰富的语法。 1. TypeScript的优点 1.1. 编译时类型检查 所有的动态语言,包括JavaScript,其在编写过程中一些拼...

Unbutu下装oracle

Ubuntu 16.04安装Oracle 11gR2入门教程图文详解 转自         https://www.linuxidc.com/Linux/2017-12/149797.htm  原文作者 :rogear               概述 Ubuntu版本:ubuntu-16.04.3-desktop-amd64 Oracle版...