錯誤現象
error LNK2019: 無法解析的外部符號 "public: __thiscall acl::TcpClient::TcpClient(void)"
根本原因
項目中不同源文件使用了不同運行時庫:
- 有的用 多線程 (/MT)(靜態鏈接 Release 版 CRT)。
- 有的用 多線程調試 (/MTd)(靜態鏈接 Debug 版 CRT)。
- 或混用動態鏈接 (/MD /MDd)。
導致符號名稱修飾/庫函數不一致,鏈接器找不到匹配符號。
解決方案
統一整個解決方案的代碼生成 → 運行時庫設置:
- Release 統一 /MT(或 /MD)。
- Debug 統一 /MTd(或 /MDd)。
操作路徑:專案屬性 → 配置屬性 → C/C++ → 代碼生成 → 運行時庫。
最佳實踐
- 所有項目(主程序、靜態庫、動態庫)同一解決方案配置使用相同 CRT 版本。
- 引用第三方庫時,確認其編譯所用 CRT,或獲取源碼重新編譯。
- 避免在同一進程混合不同 CRT(會導致堆隔離、locale 不同、文件句柄不共享等嚴重問題)。