【問題解決記錄】無法識別的標志“-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的工程即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM