編譯器規則

2021-07-25 22:56:03 字數 792 閱讀 2878

類似這樣的錯誤:c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afxver_.h(81): fatal error c1189: #error :  please use the /md switch for _afxdll builds。之前一直沒注意過mfc庫使用方式需要與執行時庫一致的問題,感覺很是奇怪,後來搜尋了一下才知道有這樣的問題。所以在此簡要的說明一下這樣的問題,以給大家提供乙個參考。

vs2010編譯器要求mfc庫使用方式需要與執行時庫需一致,否則會出現錯誤或者警告。

如果使用mfc動態庫,則要使用動態的執行時庫;如果使用mfc靜態庫,則要使用靜態的執行時庫。同時,如果工程是debug配置,則要用除錯版本的執行時庫;如果是release配置,則要呼叫非除錯版本的執行時庫,具體對應關係,如下所示:(d-dll,d-debug)

1、在共享 dll 中使用 mfc(執行時庫肯定要用動態的執行時庫)

debug配置  -->  multi-threaded debug dll(/mdd)

release配置  -->  multi-threaded dll(/md)

2、在靜態庫中使用 mfc(執行時庫肯定要用靜態的執行時庫)

debug配置  -->  multi-threaded debug(/mtd)

release配置  -->  multi-threaded(/mt)

編譯器的符號修飾規則

編譯器編譯源 生成目標檔案時,需要為每乙個變數 函式生成符號,儲存到符號表。在符號表中,每乙個符號必須唯一,因此要求源 中不能存在與其它檔案中的變數名 函式名相同的函式,包括使用到的庫中的函式。為了解決符號名衝突的問題,編譯器會對源 中的符號進行修飾,如unix下編譯生成的符號會在符號名前加下劃線 ...

ARM交叉編譯器命名規則

命名規則 交叉編譯工具鏈的命名規則為 arch vendor os gnu eabi arch 體系架構,如arm,mips verdor 工具鏈提供商 os 目標作業系統 eabi 嵌入式應用二進位制介面 根據對作業系統的支援與否,arm gcc可分為支援和不支援作業系統,如 arm none e...

編譯器的函式名修飾規則

函式的名字修飾 decorated name 就是編譯器在編譯期間建立的乙個字串,用來指明函式的定義或原型。link程式或其他工具有時需要指定函式的名字修飾來定位函式的正確位置。多數情況下程式設計師並不需要知道函式的名字修飾,link程式或其他工具會自動區分他們。當然,在某些情況下需要指定函式的名字...