首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

VS2017 LNK2019錯誤解決:運行時庫不匹配(/MT vs /MTd)

     編輯:關於C

錯誤現象

error LNK2019: 無法解析的外部符號 "public: __thiscall acl::TcpClient::TcpClient(void)"
引用於函數 "public: __thiscall CTcpClient::CTcpClient(void)"

根因分析

項目中混合使用了不同運行時庫版本:

  • 部分代碼編譯為多線程(/MT) — 釋放版運行時庫
  • 部分代碼編譯為多線程調試(/MTd) — 調試版運行時庫

鏈接器檢測到運行時庫類型不一致,拒絕生成可執行文件。

解決方案

統一全項目運行時庫設置:

  1. 打開項目屬性 → 配置屬性 → C/C++ → 代碼生成 → 運行時庫
  2. 將所有配置(Debug/Release)統一為同一選項:
配置推薦設置宏定義
Debug多線程調試 (/MTd)_DEBUG, _MT
Release多線程 (/MT)NDEBUG, _MT

關鍵原則:同一解決方案內所有項目、所有源文件必須使用相同運行時庫類型。引用第三方靜態庫時,確保其編譯時的運行時庫與主項目一致。

擴展知識

  • /MD//MDd:動態鏈接MSVCRT.dll,體積小但有部署依賴
  • /MT//MTd:靜態鏈接,獨立部署但體積大
  • 混合/MT和/MD同樣會導致LNK2019
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved