[英]RuntimeLibrary mismatch despite the correct flags being passed to all objects?
我試圖鏈接庫(我們稱之為LibB
)的程序( TheProgram
已經連接的其他庫)( LibA
)。
調試配置構建良好,但在發布模式下我收到此錯誤:
error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MTd_StaticDebug' in TheProgram.obj
我認為這很容易修復,因為我只需要確保每個鏈接對象都是用 /MT 構建的。 我做到了,他們都是。 我還檢查了在此配置中是否有任何具有不同運行時標志的每個文件設置 - 沒有。 還檢查了構建中的最終命令行 - 到處都是 /MT 。
更有趣的是,如果我鏈接LibB
的調試版本(在構建發布配置時),這個錯誤就會消失,但我會收到其他錯誤。
盡管到處都有匹配的標志,但什么可能導致不匹配?
這讓我發瘋了,花了幾天時間才發現。 我想在這里分享這個,因為有很多問題實際上是 /M* 標志不匹配,但這里的情況並非如此。
錯誤是我在調試模式下添加了一個新的預處理器定義,然后將整個字段復制到發布配置(不想擺弄鼠標選擇)。 該字段包含_DEBUG
(而不是NDEBUG
),這導致鏈接器檢測到 /MTd 正在鏈接。 當我在Release模式下的Preprocessor Definitions中將_DEBUG
改為NDEBUG
時,問題就解決了。
作為旁注,我試圖在git diff
找到錯誤,因為我有一個很好的主意是哪個提交引入了它,但是由於 VS 項目的性質,如果沒有逐字差異很難看到文件格式。 一位同事為我發現了這個定義,但他也向我指出了這個關於在 git diff 中突出顯示單詞差異的答案,我認為這對於查找此類問題非常有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.