發(fā)環(huán)境配置全攻略:從安裝到第三方庫(kù)集成)
1. 項(xiàng)目概述為什么選擇Visual Studio 2019進(jìn)行C開(kāi)發(fā)如果你正準(zhǔn)備踏入C開(kāi)發(fā)的大門(mén)或者從其他輕量級(jí)編輯器比如VSCode、Dev-C遷移過(guò)來(lái)面對(duì)Visual Studio 2019這個(gè)“龐然大物”心里可能會(huì)有點(diǎn)發(fā)怵。安裝包好幾個(gè)G安裝選項(xiàng)密密麻麻裝完之后還得配置環(huán)境聽(tīng)起來(lái)就麻煩。但我想說(shuō)的是對(duì)于Windows平臺(tái)下的C開(kāi)發(fā)尤其是涉及桌面應(yīng)用、游戲、系統(tǒng)工具或者需要深度調(diào)試的項(xiàng)目VS2019至今仍是許多老手和新手繞不開(kāi)的“瑞士軍刀”。它不只是一個(gè)代碼編輯器而是一個(gè)集成開(kāi)發(fā)環(huán)境IDE把寫(xiě)代碼、編譯、調(diào)試、項(xiàng)目管理、版本控制甚至性能分析都打包在了一起。用熟了之后你會(huì)發(fā)現(xiàn)它替你省下的時(shí)間遠(yuǎn)遠(yuǎn)超過(guò)你初次安裝配置所花費(fèi)的。網(wǎng)上有很多教程但要么太舊要么只講安裝不講配置要么配置了卻沒(méi)說(shuō)清楚原理導(dǎo)致你跟著做完了能跑個(gè)“Hello World”但一換項(xiàng)目或者一遇到鏈接錯(cuò)誤就懵了。這篇內(nèi)容我會(huì)以一個(gè)過(guò)來(lái)人的身份帶你走一遍從零開(kāi)始安裝Visual Studio 2019并配置一個(gè)“真正能用”的C開(kāi)發(fā)環(huán)境的完整流程。我會(huì)重點(diǎn)解釋每一步背后的邏輯比如為什么要選某個(gè)工作負(fù)載那些運(yùn)行時(shí)庫(kù)到底是什么以及如何避免最常見(jiàn)的環(huán)境配置坑。我們的目標(biāo)不僅僅是讓程序跑起來(lái)而是讓你理解這個(gè)環(huán)境是如何運(yùn)作的這樣以后出了問(wèn)題你才知道該從哪里下手解決。2. 安裝前的核心準(zhǔn)備與規(guī)劃在點(diǎn)擊下載按鈕之前花幾分鐘做好規(guī)劃能避免后續(xù)很多不必要的麻煩。安裝VS2019不是下一個(gè)軟件點(diǎn)下一步那么簡(jiǎn)單它更像是一次“系統(tǒng)定制”。2.1 硬件與系統(tǒng)要求核查首先看你的電腦是否扛得住。VS2019對(duì)硬件的要求不算低尤其是如果你打算進(jìn)行大型項(xiàng)目開(kāi)發(fā)。操作系統(tǒng)Windows 10 版本 1703 或更高版本這是最低要求。強(qiáng)烈建議使用Windows 10 1903或更新版本以獲得最好的兼容性和性能。Windows 11自然完全支持。處理器1.8 GHz 或更快的處理器。雙核以上是基本四核或更多核心在進(jìn)行大型項(xiàng)目編譯時(shí)會(huì)體驗(yàn)更佳。內(nèi)存至少4 GB RAM但這是“能用”的標(biāo)準(zhǔn)。對(duì)于流暢的C開(kāi)發(fā)特別是使用IDE的智能感知IntelliSense功能和處理中型以上項(xiàng)目時(shí)8 GB是起步16 GB或以上才能稱得上舒適。內(nèi)存不足會(huì)導(dǎo)致IDE卡頓、編譯緩慢甚至崩潰。硬盤(pán)空間這是重頭戲。最低要求大約20-40 GB的可用空間但這僅僅是基礎(chǔ)。根據(jù)你選擇安裝的工作負(fù)載和組件建議預(yù)留至少50-80 GB的SSD空間。安裝在固態(tài)硬盤(pán)SSD上和機(jī)械硬盤(pán)HDD上IDE的啟動(dòng)速度、項(xiàng)目加載速度和編譯速度會(huì)有天壤之別。我的經(jīng)驗(yàn)是只要條件允許務(wù)必裝在SSD上。注意很多教程會(huì)忽略磁盤(pán)類型的影響。對(duì)于開(kāi)發(fā)而言SSD帶來(lái)的性能提升是革命性的。如果你的主硬盤(pán)是SSD但空間緊張可以考慮將VS安裝在SSD上而將大型的SDK、工具鏈緩存目錄通過(guò)設(shè)置轉(zhuǎn)移到其他硬盤(pán)以平衡速度和空間。2.2 安裝程序獲取與版本選擇前往微軟官方Visual Studio網(wǎng)站下載安裝程序。這里你會(huì)遇到第一個(gè)選擇Community社區(qū)版、Professional專業(yè)版還是Enterprise企業(yè)版對(duì)于絕大多數(shù)個(gè)人學(xué)習(xí)者、開(kāi)源項(xiàng)目貢獻(xiàn)者和小型團(tuán)隊(duì)Community版是完全免費(fèi)且功能完備的。它包含了進(jìn)行C開(kāi)發(fā)所需的所有核心功能高級(jí)代碼編輯、調(diào)試、性能診斷、Git版本控制集成等。Professional和Enterprise版主要面向企業(yè)用戶提供更高級(jí)的架構(gòu)分析、測(cè)試工具和團(tuán)隊(duì)協(xié)作功能價(jià)格不菲。除非公司要求否則Community版是你的不二之選。下載下來(lái)的是一個(gè)很小的引導(dǎo)程序通常叫vs_community.exe大小約1-2 MB。它的作用是聯(lián)網(wǎng)檢查你的系統(tǒng)并讓你選擇要安裝的具體內(nèi)容。請(qǐng)務(wù)必從官方渠道下載避免第三方打包可能帶來(lái)的安全風(fēng)險(xiǎn)或捆綁軟件。2.3 工作負(fù)載與組件的選擇策略運(yùn)行安裝程序后你會(huì)看到一個(gè)選擇工作負(fù)載的界面。這是整個(gè)安裝過(guò)程中最關(guān)鍵的決策點(diǎn)選錯(cuò)了要么功能不全要么硬盤(pán)爆滿。核心選擇“使用C的桌面開(kāi)發(fā)”對(duì)于C學(xué)習(xí)者和大多數(shù)應(yīng)用開(kāi)發(fā)者你必須勾選這個(gè)工作負(fù)載。它包含了MSVC編譯器工具集這是Visual Studio自帶的C編譯器cl.exe和鏈接器link.exe是編譯Windows本地C代碼的核心。Windows SDK提供了開(kāi)發(fā)Windows應(yīng)用程序所需的頭文件、庫(kù)和工具。即使你寫(xiě)控制臺(tái)程序一些基礎(chǔ)API也會(huì)用到它。C CMake 工具現(xiàn)在CMake是跨平臺(tái)C項(xiàng)目構(gòu)建的事實(shí)標(biāo)準(zhǔn)勾選它可以直接在VS里打開(kāi)和管理CMake項(xiàng)目非常方便。測(cè)試工具可選但對(duì)于養(yǎng)成寫(xiě)單元測(cè)試的好習(xí)慣很有幫助??蛇x的實(shí)用組件在單個(gè)組件標(biāo)簽頁(yè)中C Clang編譯工具如果你想體驗(yàn)或必須使用Clang/LLVM編譯器在Windows上通常通過(guò)Clang-cl可以勾選。對(duì)于純新手MSVC足夠。用于 Windows 的 C AddressSanitizer一個(gè)強(qiáng)大的內(nèi)存錯(cuò)誤檢測(cè)工具對(duì)于排查內(nèi)存泄漏、緩沖區(qū)溢出等問(wèn)題極其有用建議勾選。Git for Windows如果你還沒(méi)有安裝Git這里可以一并裝上方便進(jìn)行版本控制。類設(shè)計(jì)器可視化查看類關(guān)系圖對(duì)于理解復(fù)雜項(xiàng)目結(jié)構(gòu)有幫助但非必需。安裝位置修改 點(diǎn)擊“安裝位置”選項(xiàng)卡你可以分別設(shè)置“共享組件、工具和SDK”的路徑以及“下載緩存”的路徑。如果你的C盤(pán)默認(rèn)安裝盤(pán)空間緊張可以將它們?cè)O(shè)置到其他容量更大的磁盤(pán)。但請(qǐng)注意將核心組件移到非系統(tǒng)盤(pán)有時(shí)可能引發(fā)一些路徑相關(guān)的罕見(jiàn)問(wèn)題對(duì)于新手如果空間不是極度緊張保持默認(rèn)是最穩(wěn)妥的。我的建議是初次安裝確保勾選“使用C的桌面開(kāi)發(fā)”工作負(fù)載其他一概不選。先讓核心環(huán)境跑起來(lái)。那些用于游戲開(kāi)發(fā)的“使用C的游戲開(kāi)發(fā)”、用于移動(dòng)端的“使用C的移動(dòng)開(kāi)發(fā)”等等你有明確需求時(shí)可以通過(guò)安裝程序的“修改”功能隨時(shí)添加。貪多求全一次性安裝只會(huì)拖慢安裝速度、占用大量空間而其中90%的組件你可能永遠(yuǎn)用不上。3. 安裝過(guò)程詳解與注意事項(xiàng)點(diǎn)擊安裝按鈕后剩下的就是等待。這個(gè)過(guò)程可能會(huì)比較漫長(zhǎng)取決于你的網(wǎng)速和選擇的組件從幾十分鐘到數(shù)小時(shí)不等。3.1 安裝過(guò)程中的關(guān)鍵節(jié)點(diǎn)下載階段安裝程序會(huì)根據(jù)你的選擇下載所需的包。你可以看到實(shí)時(shí)進(jìn)度和下載速度。如果網(wǎng)絡(luò)不穩(wěn)定可能會(huì)中斷安裝程序一般支持?jǐn)帱c(diǎn)續(xù)傳。安裝與配置階段下載完成后開(kāi)始本地安裝和系統(tǒng)配置。這個(gè)過(guò)程會(huì)注冊(cè)組件、設(shè)置環(huán)境變量等。在此期間盡量不要操作電腦進(jìn)行其他高負(fù)載任務(wù)以免安裝出錯(cuò)。要求重啟安裝完成后極有可能提示需要重啟計(jì)算機(jī)。這是因?yàn)橐恍┖诵南到y(tǒng)組件如VC運(yùn)行時(shí)庫(kù)、.NET框架的安裝或更新需要重啟才能生效。務(wù)必按照提示重啟否則后續(xù)開(kāi)發(fā)可能會(huì)遇到無(wú)法預(yù)料的奇怪問(wèn)題。3.2 安裝后首次啟動(dòng)與基本設(shè)置重啟后從開(kāi)始菜單啟動(dòng)Visual Studio 2019。首次啟動(dòng)會(huì)讓你進(jìn)行一些初始設(shè)置登錄微軟賬戶可選。登錄后可以同步一些設(shè)置如主題、快捷鍵配置到云端在不同設(shè)備間保持一致的開(kāi)發(fā)體驗(yàn)。對(duì)于個(gè)人使用不登錄也不影響核心功能。開(kāi)發(fā)設(shè)置選擇“Visual C”。這會(huì)將IDE的鍵盤(pán)映射、窗口布局等預(yù)設(shè)為適合C開(kāi)發(fā)的模式。主題選擇選一個(gè)你喜歡的顏色主題深色/淺色。我個(gè)人偏愛(ài)深色主題Dark長(zhǎng)時(shí)間編碼眼睛更舒適。進(jìn)入主界面后建議先檢查一下安裝是否成功。點(diǎn)擊菜單欄的“幫助” - “關(guān)于 Microsoft Visual Studio”。在彈出的對(duì)話框中你應(yīng)該能看到“Microsoft Visual Studio Community 2019”以及具體的版本號(hào)如16.11.xx。下面列出的已安裝產(chǎn)品中應(yīng)包含“Visual C 2019 工具”等。4. C開(kāi)發(fā)環(huán)境的核心配置實(shí)戰(zhàn)安裝完成只是搭好了舞臺(tái)要讓C項(xiàng)目順利跑起來(lái)還需要進(jìn)行一些關(guān)鍵配置。很多人卡在“配置環(huán)境”這一步其實(shí)核心就是讓編譯器、鏈接器、調(diào)試器能找到它們需要的東西。4.1 創(chuàng)建并理解你的第一個(gè)C項(xiàng)目不要直接去配環(huán)境變量我們先通過(guò)創(chuàng)建一個(gè)標(biāo)準(zhǔn)項(xiàng)目讓VS為我們自動(dòng)配置好大部分內(nèi)容。啟動(dòng)VS選擇“創(chuàng)建新項(xiàng)目”。在項(xiàng)目模板中搜索“C”選擇“控制臺(tái)應(yīng)用”Console App點(diǎn)擊下一步。輸入項(xiàng)目名稱如HelloWorld選擇項(xiàng)目存放的位置。注意“解決方案名稱”默認(rèn)和項(xiàng)目名稱一樣一個(gè)解決方案可以包含多個(gè)項(xiàng)目對(duì)于初學(xué)者保持默認(rèn)即可。點(diǎn)擊“創(chuàng)建”。VS會(huì)自動(dòng)生成一個(gè)包含main.cpp的簡(jiǎn)單項(xiàng)目。現(xiàn)在直接按F5啟動(dòng)調(diào)試或CtrlF5開(kāi)始執(zhí)行不調(diào)試。如果一切順利你會(huì)看到一個(gè)控制臺(tái)窗口輸出“Hello World!”。這證明你的編譯器和基本運(yùn)行環(huán)境是通的。4.2 深入理解項(xiàng)目屬性頁(yè)能運(yùn)行“Hello World”只是第一步。要真正掌控環(huán)境必須理解“項(xiàng)目屬性頁(yè)”。在解決方案資源管理器中右鍵點(diǎn)擊你的項(xiàng)目名如HelloWorld選擇“屬性”。這是一個(gè)非常重要的對(duì)話框幾乎所有環(huán)境配置都在這里進(jìn)行。它分為“配置”和“平臺(tái)”兩個(gè)下拉框?!芭渲谩蓖ǔJ恰癉ebug”調(diào)試或“Release”發(fā)布“平臺(tái)”通常是“x86”32位或“x64”64位。配置和平臺(tái)是組合生效的也就是說(shuō)你可以為“Debug|x64”設(shè)置一套屬性為“Release|x86”設(shè)置另一套屬性。新手常犯的錯(cuò)誤是修改了屬性但沒(méi)注意當(dāng)前活動(dòng)的配置平臺(tái)導(dǎo)致修改不生效。屬性頁(yè)主要關(guān)注左側(cè)的幾個(gè)節(jié)點(diǎn)常規(guī)設(shè)置輸出目錄、目標(biāo)文件名、平臺(tái)工具集等。平臺(tái)工具集默認(rèn)是“Visual Studio 2019 (v142)”這就是我們安裝的MSVC編譯器版本。除非有兼容舊項(xiàng)目需求否則不要?jiǎng)?。VC目錄這是歷史遺留的配置方式微軟官方已不推薦直接在這里修改但了解它有助理解。包含目錄告訴編譯器去哪里找#include的頭文件.h, .hpp。庫(kù)目錄告訴鏈接器去哪里找靜態(tài)庫(kù)文件.lib。C/C常規(guī)這里可以設(shè)置“附加包含目錄”這是現(xiàn)代項(xiàng)目添加第三方頭文件路徑的推薦位置比修改“VC目錄”更安全只影響當(dāng)前項(xiàng)目。預(yù)處理器定義宏的地方比如_CRT_SECURE_NO_WARNINGS用來(lái)禁用某些安全警告。代碼生成設(shè)置“運(yùn)行時(shí)庫(kù)”非常重要Debug模式通常用/MDd多線程DLL調(diào)試Release模式用/MD多線程DLL。如果搞混會(huì)導(dǎo)致鏈接錯(cuò)誤。鏈接器常規(guī)設(shè)置“附加庫(kù)目錄”這是添加第三方.lib文件路徑的推薦位置。輸入設(shè)置“附加依賴項(xiàng)”在這里添加你需要鏈接的.lib庫(kù)文件名例如opengl32.lib。4.3 配置第三方庫(kù)以開(kāi)源庫(kù)為例假設(shè)你現(xiàn)在想使用一個(gè)開(kāi)源的C庫(kù)比如jsoncpp來(lái)處理JSON數(shù)據(jù)。你需要讓你的項(xiàng)目能找到它。獲取庫(kù)文件從GitHub下載jsoncpp的源碼使用CMake編譯或者直接下載別人編譯好的“預(yù)編譯二進(jìn)制包”。通常你會(huì)得到include文件夾里面是所有的頭文件.h。lib文件夾里面是靜態(tài)庫(kù)文件.lib可能分為Debug和Release版本以及不同平臺(tái)x86/x64。dll文件夾如果有動(dòng)態(tài)鏈接庫(kù)文件.dll。組織目錄在你的項(xiàng)目目錄下或者一個(gè)統(tǒng)一的第三方庫(kù)目錄創(chuàng)建一個(gè)ThirdParty文件夾把jsoncpp的include和lib文件夾拷貝進(jìn)去。結(jié)構(gòu)如下MyProject/ ├── HelloWorld.sln ├── HelloWorld/ │ ├── HelloWorld.vcxproj │ └── ThirdParty/ │ └── jsoncpp/ │ ├── include/ │ │ └── json/ │ │ └── *.h │ └── lib/ │ ├── Debug/ │ │ ├── jsoncpp.lib (Debug版) │ │ └── ... (x86/x64子文件夾) │ └── Release/ │ └── ...項(xiàng)目屬性配置打開(kāi)項(xiàng)目屬性頁(yè)確保右上角配置為“Debug|x64”假設(shè)你用64位調(diào)試。C/C - 常規(guī) - 附加包含目錄添加$(ProjectDir)ThirdParty\jsoncpp\include。$(ProjectDir)是一個(gè)宏代表當(dāng)前項(xiàng)目文件.vcxproj所在的目錄這樣配置是相對(duì)路徑項(xiàng)目移動(dòng)后依然有效。鏈接器 - 常規(guī) - 附加庫(kù)目錄添加$(ProjectDir)ThirdParty\jsoncpp\lib\Debug\x64。鏈接器 - 輸入 - 附加依賴項(xiàng)添加jsoncpp.lib。處理DLL如果使用動(dòng)態(tài)庫(kù)如果jsoncpp是以DLL方式提供的你需要將對(duì)應(yīng)的jsoncpp.dll文件Debug版拷貝到你的項(xiàng)目輸出目錄通常是$(SolutionDir)$(Configuration)\例如HelloWorld\x64\Debug\下否則程序運(yùn)行時(shí)會(huì)出現(xiàn)“找不到xxx.dll”的錯(cuò)誤。通過(guò)這種方式配置你的項(xiàng)目就具備了使用jsoncpp庫(kù)的能力。這種“附加包含目錄/附加庫(kù)目錄”的方式比直接修改系統(tǒng)級(jí)的環(huán)境變量如INCLUDE、LIB更干凈因?yàn)樗挥绊懏?dāng)前項(xiàng)目避免了全局污染。5. 高級(jí)配置與開(kāi)發(fā)效率提升基礎(chǔ)環(huán)境配通后我們可以關(guān)注一些提升開(kāi)發(fā)體驗(yàn)和項(xiàng)目健壯性的配置。5.1 管理多個(gè)配置Debug與ReleaseDebug和Release配置不僅僅是優(yōu)化級(jí)別的不同。Debug配置關(guān)閉了編譯器優(yōu)化/Od啟用了調(diào)試信息/ZI定義了_DEBUG宏。運(yùn)行時(shí)庫(kù)使用調(diào)試版本如/MDd。生成的程序體積大、速度慢但可以設(shè)置斷點(diǎn)、查看變量?jī)?nèi)存、進(jìn)行單步調(diào)試。這是開(kāi)發(fā)階段的主要配置。Release配置開(kāi)啟了全面優(yōu)化/O2去除了調(diào)試信息定義了NDEBUG宏。運(yùn)行時(shí)庫(kù)使用發(fā)布版本/MD。生成的程序體積小、速度快用于最終交付。你需要為這兩種配置分別設(shè)置正確的庫(kù)路徑。例如第三方庫(kù)的Debug版.lib文件應(yīng)只在Debug配置的“附加依賴項(xiàng)”中鏈接Release配置則鏈接Release版的.lib。如果混用在Release模式下鏈接了Debug庫(kù)可能會(huì)因?yàn)閮?nèi)存分配器不同而導(dǎo)致難以排查的運(yùn)行時(shí)崩潰。5.2 使用屬性表.props文件進(jìn)行配置復(fù)用如果你有多個(gè)項(xiàng)目都需要使用相同的第三方庫(kù)比如一個(gè)解決方案里有exe項(xiàng)目和幾個(gè)dll項(xiàng)目每個(gè)項(xiàng)目都配一遍屬性非常繁瑣且容易出錯(cuò)。這時(shí)可以使用“屬性表”。在“視圖”菜單中打開(kāi)“屬性管理器”。右鍵點(diǎn)擊你的項(xiàng)目下的“Debug|x64”選擇“添加新項(xiàng)目屬性表”命名為CommonLibs.props。雙擊這個(gè)新加的屬性表在里面配置“附加包含目錄”、“附加庫(kù)目錄”等所有公共設(shè)置。以后新建的項(xiàng)目只需要在屬性管理器中“添加現(xiàn)有屬性表”引入這個(gè)CommonLibs.props文件所有配置就自動(dòng)生效了。這是管理復(fù)雜項(xiàng)目依賴的必備技巧。5.3 集成實(shí)用工具與擴(kuò)展VS2019的強(qiáng)大還體現(xiàn)在其豐富的擴(kuò)展生態(tài)。Visual Assist一個(gè)收費(fèi)但極其強(qiáng)大的代碼輔助工具提供遠(yuǎn)超原生IntelliSense的代碼補(bǔ)全、導(dǎo)航、重構(gòu)功能。對(duì)于大型C項(xiàng)目幾乎是生產(chǎn)力倍增器。ReSharper C另一個(gè)強(qiáng)大的C代碼分析、重構(gòu)和輔助工具來(lái)自JetBrains。C Code AnalysisVS內(nèi)置的代碼分析工具可以在“項(xiàng)目屬性 - 代碼分析”中啟用。它能幫你發(fā)現(xiàn)許多潛在的內(nèi)存、性能和代碼規(guī)范問(wèn)題建議定期運(yùn)行。此外熟練使用VS的調(diào)試器監(jiān)視、內(nèi)存、反匯編窗口、性能探查器診斷工具和內(nèi)置的Git工具都能極大提升你的開(kāi)發(fā)效率。6. 常見(jiàn)問(wèn)題排查與解決方案實(shí)錄即使按照教程一步步來(lái)也難免會(huì)遇到問(wèn)題。這里記錄幾個(gè)我踩過(guò)的坑和解決方案。6.1 “無(wú)法打開(kāi)源文件”或“找不到頭文件”問(wèn)題描述編譯時(shí)提示fatal error C1083: 無(wú)法打開(kāi)包括文件: “xxx.h”: No such file or directory。排查步驟檢查“附加包含目錄”路徑是否正確。注意路徑中的斜杠方向/或\和大小寫(xiě)在Windows上通常不敏感但最好一致。使用$(ProjectDir)等宏可以避免絕對(duì)路徑問(wèn)題。在“附加包含目錄”中添加的是包含頭文件所在文件夾的父目錄。例如你的代碼是#include “json/json.h”那么“附加包含目錄”應(yīng)該添加到j(luò)son文件夾的上一級(jí)目錄。在解決方案資源管理器中確認(rèn)頭文件是否被包含在項(xiàng)目中右鍵點(diǎn)擊項(xiàng)目 - 添加 - 現(xiàn)有項(xiàng)。對(duì)于第三方庫(kù)的頭文件通常不需要添加到項(xiàng)目里只要編譯器能找到路徑就行。6.2 LNK2019/LNK2001無(wú)法解析的外部符號(hào)錯(cuò)誤問(wèn)題描述鏈接階段報(bào)錯(cuò)提示某個(gè)函數(shù)或變量找不到定義。這是C開(kāi)發(fā)中最常見(jiàn)的鏈接錯(cuò)誤。排查步驟檢查庫(kù)文件是否鏈接首先確認(rèn)在“附加依賴項(xiàng)”中是否正確添加了所需的.lib文件名。文件名必須完全正確包括后綴。檢查庫(kù)目錄和庫(kù)文件版本確認(rèn)“附加庫(kù)目錄”指向的路徑下是否存在對(duì)應(yīng)配置Debug/Release和平臺(tái)x86/x64的.lib文件。Debug配置必須鏈接Debug版的庫(kù)通常庫(kù)名后有d后綴如jsoncppd.libRelease配置鏈接Release版庫(kù)。檢查函數(shù)聲明與定義是否匹配確保你調(diào)用的函數(shù)簽名函數(shù)名、參數(shù)類型、調(diào)用約定與庫(kù)中提供的完全一致。在C中函數(shù)重載和命名空間很容易導(dǎo)致簽名不匹配。檢查運(yùn)行時(shí)庫(kù)是否一致在“C/C - 代碼生成 - 運(yùn)行時(shí)庫(kù)”設(shè)置中你的項(xiàng)目使用的運(yùn)行時(shí)庫(kù)如/MDd必須與所鏈接的庫(kù)編譯時(shí)使用的運(yùn)行時(shí)庫(kù)一致。不一致是導(dǎo)致LNK2001/LNK2019的隱形殺手。6.3 程序運(yùn)行時(shí)提示“找不到VCRUNTIME140.dll”或類似錯(cuò)誤問(wèn)題描述編譯鏈接成功但運(yùn)行時(shí)彈出系統(tǒng)錯(cuò)誤框。原因與解決你的程序動(dòng)態(tài)鏈接了VC運(yùn)行時(shí)庫(kù)如果你使用/MD或/MDd但目標(biāo)機(jī)器上沒(méi)有安裝相應(yīng)版本的運(yùn)行時(shí)庫(kù)。解決方案打包發(fā)布對(duì)于要分發(fā)給別人的程序最穩(wěn)妥的方式是使用“靜態(tài)鏈接”。將“C/C - 代碼生成 - 運(yùn)行時(shí)庫(kù)”改為/MTRelease或/MTdDebug。這樣運(yùn)行時(shí)庫(kù)的代碼會(huì)被打包進(jìn)你的exe無(wú)需依賴外部dll但exe體積會(huì)增大。安裝可再發(fā)行組件包讓用戶在你程序的安裝包中包含并安裝對(duì)應(yīng)版本的“Microsoft Visual C Redistributable for Visual Studio 2019”。這個(gè)安裝包微軟官網(wǎng)可以下載。這是很多正規(guī)軟件采用的方式??截怐LL將所需的msvcp140.dll,vcruntime140.dll等位于VS安裝目錄的VC\Redist\MSVC\...下拷貝到你的exe同級(jí)目錄。這種方法不推薦用于正式分發(fā)但用于臨時(shí)測(cè)試很方便。6.4 IntelliSense智能感知不工作或顯示錯(cuò)誤問(wèn)題描述代碼沒(méi)有紅色波浪線但I(xiàn)ntelliSense代碼補(bǔ)全、懸停提示不出現(xiàn)或提示錯(cuò)誤信息。排查步驟嘗試關(guān)閉解決方案.sln文件和VS然后重新打開(kāi)。有時(shí)候IntelliSense數(shù)據(jù)庫(kù).ipch文件會(huì)損壞。刪除項(xiàng)目目錄下的.vs隱藏文件夾關(guān)閉VS后操作這個(gè)文件夾包含了IntelliSense緩存刪除后VS會(huì)重建它。檢查“工具 - 選項(xiàng) - 文本編輯器 - C/C - 高級(jí)”中的“IntelliSense”相關(guān)設(shè)置特別是“禁用IntelliSense”是否被誤勾選。對(duì)于大型項(xiàng)目IntelliSense初始化可能需要時(shí)間請(qǐng)耐心等待右下角的“IntelliSense就緒”提示。環(huán)境配置是C開(kāi)發(fā)者的必修課也是一個(gè)從懵懂到精通的過(guò)程。最開(kāi)始可能會(huì)被各種錯(cuò)誤折磨但每解決一個(gè)問(wèn)題你對(duì)編譯、鏈接、庫(kù)這些概念的理解就會(huì)加深一層。Visual Studio 2019雖然龐大但它提供的工具鏈在Windows平臺(tái)是頂級(jí)的。我的建議是不要畏懼去點(diǎn)開(kāi)那些復(fù)雜的屬性頁(yè)多嘗試多理解每個(gè)選項(xiàng)的意義。配置出一個(gè)干凈、穩(wěn)定、可復(fù)用的開(kāi)發(fā)環(huán)境是你后續(xù)高效學(xué)習(xí)和項(xiàng)目開(kāi)發(fā)的堅(jiān)實(shí)基礎(chǔ)。當(dāng)你熟悉了這套流程未來(lái)即使切換到CMake等更現(xiàn)代的構(gòu)建工具或者配置其他復(fù)雜的第三方依賴其核心思想也是相通的。