記錄VS2017使用遇到的一些問題


VS編譯錯誤官網解釋: https://docs.microsoft.com/zh-cn/cpp/error-messages/tool-errors/linker-tools-error-lnk1104?view=vs-2019

問題1: vs2017,安裝錯誤:找不到與以下參數匹配的產品

找不到與以下參數匹配的產品:
channelId: VisualStudio.15.Release
productId: Microsoft.VisualStudio.Product.Community

解決方法:

    第一步:刪除隱藏文件夾(擔心刪掉會有不良影響的可以直接改Packages這個文件夾的名字):
    C:\ProgramData\Microsoft\VisualStudio\Packages
    第二步:運行:
    C:\Program Files (x86)\Microsoft Visual Studio\Installer\resources\app\layout\InstallCleanup.exe -i

    第三步:找到C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installershell.exe,以管理員權限運行,重新安裝一次。

問題2: VS 2017 工具問題"本次安裝Visual Studio 所用的安裝程序不完整"

解決方法:

   找到C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installershell.exe,以管理員權限運行,重新安裝一次。安裝不成功的參照問題1來解決。

問題3: VS 2017單獨增加某個組件

解決方法:依次點擊下面菜單項

   工具-》獲取工具和功能-》單個組件-》選擇你少的組件就行了

問題4: VS 2017單獨增加windows的SDK包

解決方法:同問題3,依次點擊下面菜單項

   工具-》獲取工具和功能-》單個組件-》選擇你少的組件就行了

問題5:如何安裝vsix擴展工具

解決方法:1.找到安裝時VSIXInstaller.exe所在目錄,默認目錄在C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\VSIXInstaller.exe

     2.cmd命令窗口切換到 這個路徑下,然后將你要安裝的vsix文件拖到dos窗口里,這樣就有vsix文件的路徑了.

                 3.回車就可以進行安裝了,安裝安裝完成后重啟VS。

問題6:VS2017編譯--錯誤: 未能完成操作。未指定的錯誤

解決方法:1.將編譯報錯的工程卸載后再加載。

問題7:VS2017數據斷點為灰色不能設置的原因:

解決方法:

1.數據斷點只能在break mode下使用,也就是說首先得設置一個普通的斷點進入debug break之后才能啟用數據斷點功能。

2.數據斷點只能對Native Code使用,調試時只能選擇Native Code,不能帶有Managed Code(托管代碼)。遠程調試就只能勾選Native Code這一項。本地調試選自動或者非托管。

3.C++/C#混合工程時,需要將C#工程屬性:general->Common Language Runtime support 的值修改成 No Common Language Runtime support。(如果想在C++/C的工程中調用C#的庫的話需要將啟動工程的屬性設置為:Common Language Runtime support,因此在混合工程中,需要注意此處屬性的切換)

問題8:Release 版本用作調試時,需要對項目屬性做以下設置

1.配置C/C++ >General>Debug Information Format 應該為 “Program Database(/Zi)”
2.配置C/C++ >Optimization>Optimization 應該為”Disabld(/Od)”
3.配置Linker>Debugging>Generate Debug Info 應該為”Yes/(DEBUG)”

問題9:error LNK2038: 檢測到“_MSC_VER”的不匹配項: 值“1600”不匹配值“1900”

宏 _MSC_VER :表明了當前項目的編譯器的主版本

對應vs版本:_MSC_VER

問題原因:在編譯過程中,由 Visual Studio 2010 的編譯器編譯出來的靜態鏈接庫文件 xxx.lib 放到了當前的 Visual Studio 2017 的編譯器中與當前項目一起編譯.

解決方案有如下兩個:

1.找指示編譯器對應的編譯平台進行編譯:比如這里 _MSC_VER 為 1600,對應了 Visual Studio 2010,這是將當前項目與靜態鏈接庫的編譯器版本進行統一的方法

2.使用你當前使用的 VS 對應的編譯器重新編譯出錯的靜態鏈接庫:比如這里我只需要重新編譯 xxx.lib(使用 VS2017 的編譯器)即可

問題10:LINK : fatal error C1007: 無法識別的標志“-FitObjData”(在“p2”中)

問題原因:使用lib的時候,lib庫的編譯“平台工具集”與當前工程的編譯平台不一致導致。類似問題9的原因。

解決方案:lib庫和當前工程使用相同vs版本編譯。

問題11:error MIDL2025/2026

問題原因:項目中的.idl文件編譯配置有問題。使用了新版本的windows SDK頭文件,而使用舊版本的MIDL
工具來編譯所導致。

解決方法:idl文件-->右鍵"屬性"-->"MIDL"-->"常規"

Tools > Options > Projects and Solutions > VC++ Directories > Executable Files
里添加這個SDK的BIN目錄,這樣就使用新版本的MIDL編譯工具

問題12:RC2135:file not found:xxx.lib/xxx.tlb

問題原因:Rc文件中引用了lib文件/tlb文件,但是項目中資源配置中沒有配置文件所在路徑。

解決方法:項目-->右鍵"屬性"-->"資源"-->“常規”-->附加包含目錄。

問題13:錯誤FTK1013:找不到Unicode字節順序標記

解決方法:查看磁盤空間是否滿了,如果滿了清理磁盤后重新編譯。

 

問題14:錯誤 C2857在源文件中找不到用/Ycfilename命令行選項指定的 "#include" 語句

問題原因:/Yc選項指定不包含在要編譯的源文件中的包含文件的名稱,報錯是因為找不到對應的pch文件。

解決方法:是否需要使用預編譯頭文件,如果不需要使用,則在項目-->右鍵"屬性"-->C/C++-->"預編譯頭" 刪除掉配置項指定的文件;

如果需要使用預編譯頭文件,則參考使用方法:https://docs.microsoft.com/zh-cn/cpp/error-messages/compiler-errors-2/compiler-error-c2857?view=vs-2019

 

問題15:error LNK2005: _DllMain@12 已經在 *****.obj 中定義 錯誤

解決方法:

項目-- 屬性 -- c/c++ -- 預處理器 -- 將預處理定義中的_USRDLL 刪除即可

 

問題16:fatal error LNK1104:無法打開文件kernel32.lib的解決方法

解決方法:打開項目屬性->配置屬性->VC++目錄->庫目錄

然后添加路徑 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib  (這里以windowsSDK 7.1為例)

問題17:fatal error LNK2020:

問題原因:托管類型代碼中,只有聲明沒有定義導致。類似於未定義的外部錯誤,只不過引用是通過元數據的。 在元數據中,必須定義所有函數和數據。

解決方法:(https://docs.microsoft.com/zh-cn/cpp/error-messages/tool-errors/linker-tools-error-lnk2020?view=vs-2019)

  • 定義缺少的函數或數據,或

  • 包含已在其中定義缺少的函數或數據的對象文件或庫。(很容易忽視cpp沒包含到項目中的情況)

問題17:fatal error LNK1561: 必須定義入口點

每個應用程序(文件格式為exe)都應該有個啟動點,這個點就是main函數。缺少就會出現link error 。

解決方法有兩個:

1.添加含有main函數的CPP文件

2 右擊屬性,在常規項中修改配置類型,將應用程序修改為庫,動靜態庫

 

問題18:fatal error LNK1112: 模塊計算機類型“X86”與目標計算機類型“x64”沖突

問題原因:

1.編譯環境不具備X64編譯能力;

2.鏈接的lib庫與當前編譯的工程不匹配,例如編譯64位時鏈接的lib是32位;

問題19:error C1189: #error : Please use the /MD switch for _AFXDLL builds

1.在將"運行庫"設置為MT的同時,”屬性頁->配置屬性->常規->MFC的使用”改為”在靜態庫中使用MFC”;

或者

2.在將"運行庫"設置為”多線程DLL(/MD)”,”屬性頁->配置屬性->常規->MFC的使用”設置為”在共享DLL中使用MFC”。

注:(/MD)和(/MT)是編譯Release版本用的,(/MDd)和(/MTd)是編譯Debug版本用的

問題20:error LNK1102 內存不足

解決方案:

1.清理工程,刪掉該工程之前生成的.pdb、.lib、.dll,然后重新編譯,未能解決再按照步驟2來處理。

2. 微軟官網解決方法:https://docs.microsoft.com/zh-cn/troubleshoot/visualstudio/general/linker-fatal-error-out-of-memory


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM