共用方式為


Microsoft Visual C++ 編譯程式或 Visual C++ 鏈接器疑難解答

本文提供 Visual C++ 編譯程式或 Visual C++ 連結器疑難解答的解決方法。

適用於: Microsoft Visual C++ 2010 Express、Visual Studio
原始 KB 編號: 974229

動作

在調查Microsoft Visual C++ 編譯程式或連結器可能發生的問題時,請務必盡可能取得建置流程和所使用選項的相關信息。 本文討論一些疑難解答秘訣,以協助解決您的建置問題,或擷取 Microsoft 支援服務的完整資訊。

解決方法

  • 編譯程序問題

    對於編譯程式問題,例如內部編譯程式錯誤(也就是 C1001)、停止響應或當機,擷取 C/C++ 預處理器的輸出,以提供簡化的可重現問題範例,可能很有用。 在 Visual C++ IDE 中,您可以將 [產生前置處理過的檔案] 屬性設定[含行號](/P)[不含行號] (/EP /P)來完成。 您可以在 [組態屬性]、[C/C++]、[預處理器設定] 底下的 [項目屬性] 頁面下找到此屬性。

    此設定可以從 [專案]、[屬性] 功能表在專案層級設定,在此情況下,它會為專案中的所有原始程式檔產生 .i 檔案,或是以滑鼠右鍵按兩下方案總管中的檔案來設定單一檔案,然後選取 [屬性] 操作功能表來顯示單一檔案的屬性對話框。

    /P 編譯程序參數會指示CL.EXE將預處理器輸出擷取至檔案。 新增 /EP 會隱藏將行號資訊新增至產生的檔案。 /P 已足夠,但 /EP /P 會產生較小的輸出檔案。 產生的預處理器輸出檔案的名稱會與編譯的來源檔案相同,但擴展名為 a.i,例如,file1.cpp在同一個目錄中產生 file1.i 預處理器輸出檔案。

    注意

    使用此參數時,編譯會繼續超過預處理器階段,也就是說,編譯 .OBJ 程式不會產生任何檔案,而且您可能會收到連結錯誤,反映找不到 OBJ 檔案的事實。

    您可以在 Visual Studio 專案的內容之外自行編譯預處理器輸出檔案。 檔案 .i 包含編譯該特定 .C.CPP 原始程式檔所需的所有頭檔程式代碼、巨集取代和前置處理編譯程式指示詞資訊。 換句話說,它是一個獨立的模組,應該能夠重現編譯問題,而不需要任何相依於其他檔案。 產生的檔案通常會很大,且包含大量的空格符。

  • 鏈接問題

    對於連結器問題 (LNKxxxx 類型錯誤),您可以使用 /LINKREPRO 連結器命令行參數來產生測試案例,其中包含只包含連結器輸入,而不需要任何來源檔案的相依性。 /LINKREPRO 使用下列語法:

    /LINKREPRO:<path>

    '<path>' 是本機檔系統上空白資料夾的完整路徑。 此資料夾必須已經存在 - 鏈接器不會自動建立它,而且如果資料夾不存在,就會產生錯誤。

    此選項不會直接在項目系統中公開。 若要將它新增至組建,請從 [專案] 功能表開啟專案 [屬性] 功能表。 在 [組態屬性]、[鏈接器]、[命令行] 的 [其他選項] 編輯方塊中,輸入/LINKREPRO:<path>參數(包括正斜線),並以預先存在的本機資料夾路徑取代路徑。 例如: /LINKREPRO:C:\TEMP\LINKREPRO\

    如果此編輯框中已有其他連結器選項,請以逗號分隔它們。

    或者,您可以使用 LINK_REPRO 環境變數。 LINK_REPRO如果環境變數存在,鏈接器會從環境變數讀取輸出路徑,併產生linkrepro。 使用 LINK_REPRO 環境變數時,不需要 /LINKREPRO 參數。 若要使用 LINK_REPRO 環境變數:

    1. 開啟 Visual Studio 命令提示字元。 這會安裝在 [ 開始 ] 功能表下,在Visual StudioTools子資料夾下的Visual Studio資料夾中。

    2. LINK_REPRO建立指向現有和空白目錄的環境變數,例如:SET LINK_REPRO=C:\TEMP\LINKREPRO\

    3. 從相同的命令提示字元執行 Visual Studio,使其共用您已修改的環境複本。

    4. 開啟專案並執行 [全部重建] 專案。

    在組建中叫用LINK.EXE時,它會複製項目連結至linkrepro目錄所需的所有專案。 複製的檔案中會是您的物件檔 (。OBJ),必要的連結庫檔案(。LIB),包括Microsoft連結庫和連結器回應檔(LINK。RSP),因此 LINK 不再相依於您的方案檔。

    若要確認您擁有重現鏈接問題所需的所有檔案,您可以使用linkrepro所產生的連結器回應檔,在LINK_REPRO環境變數所指定的目錄中執行LINK: LINK @link.rsp

    執行這項操作之前,請使用下列命令,在使用命令行環境變數時關閉此功能: SET LINK_REPRO=

    您也可以使用此程式來確認在使用 LIB.EXE 或 LINK /LIB 時,建立連結庫所涉及的檔案。

免責聲明

快速發佈免責聲明

快速發佈文章會直接從Microsoft支持組織內提供資訊。 本文所包含的資訊是為了響應新興或獨特的主題而建立,或旨在補充其他 知識庫 資訊。

免責聲明

Microsoft及/或其供應商對本網站上所發佈檔及相關圖形中所含資訊的適用性、可靠性或精確度無任何代表或擔保(基於任何目的)。 這些材料可能包含技術錯誤或印刷錯誤,隨時可能未經通知修訂。

根據適用法律允許的最大範圍,Microsoft及其供應商不透露,並排除有關材料之特定用途的陳述、默示或法定的所有代表、擔保和條件,包括但不限於擁有權、不侵權、滿意條件或品質、適銷性和適合特定用途的所有陳述、擔保和條件。