Share via


連結器工具錯誤 LNK1211

找不到先行編譯的類型資訊;未連結或覆寫 ' filename '

未在 LINK 命令中指定使用 /Yc 編譯的 filename 物件檔,或遭到覆寫。

如果您要建立使用先行編譯標頭的偵錯程式庫,而且如果您指定 /Yc /Z7,Visual C++ 會產生包含偵錯資訊的先行編譯物件檔。 只有在您將先行編譯的物件檔案儲存在程式庫中、使用程式庫來建置可執行檔映射,而且參考的物件檔案對預先編譯物件檔所定義的任何函式沒有任何可轉移的參考時,才會發生此錯誤。

有兩種方法可以解決此問題:

  • 指定 /Yd 編譯器選項,將先行編譯標頭中的偵錯資訊新增至每個物件模組。 此方法較不理想,因為它通常會產生大型物件模組,以增加連結應用程式所需的時間。

  • 當您建立不包含任何函式定義的先行編譯標頭檔案時,請指定 /Yl 並傳遞任何任一字元串的名稱。 這會指示編譯器在先行編譯物件檔中建立符號,並在使用與先行編譯物件檔相關聯的先行編譯標頭檔的每個物件檔案中發出該符號的參考。

當您使用 /Yc /Yl 編譯模組時,編譯器會建立類似 __@@_PchSym_@00@...@symbol_name 的符號,其中省略號 (...) 代表編譯器產生的字元字串,並將它儲存在物件模組中。 您使用這個先行編譯標頭編譯的任何來源檔案都會參考指定的符號,這會導致連結器包含物件模組及其來自程式庫的偵錯資訊。