一萬零一個錯誤

來源:互聯網
上載者:User
編譯過程中會遇到的錯誤以及解決方案

錯誤1:

 

錯誤提示:

 error LNK2001: unresolved external symbol "unsigned int (__stdcall* ATL::g_pfnGetThreadACP)(void)" (?g_pfnGetThreadACP@ATL@@3P6GIXZA)

 

解決辦法:添加#include <atlbase.h>這句話就行了

 

 

 錯誤2:

 

 錯誤提示:fatal error C1853: 'Release/BankSave.pch' precompiled header file is from a previous version of the compiler, or the precompiled header is C++ and you are using it from C (or vice versa)

 

解決辦法:這是典型的語言混合編程中出現的錯誤

當 Visual C++ 項目啟用了先行編譯頭 (Precompiled header) 功能時,如果項目中同時混合有 .c 和 .cpp 源檔案,則可能收到 C1853 編譯器錯誤:fatal error C1853: 'pjtname.pch' precompiled header file is from a previous version of the compiler, or the precompiled header is C++ and you are using it from C (or vice versa)(致命錯誤C1853:  “filename.pch”先行編譯標頭檔來自編譯器的早期版本,或者先行編譯頭為C++ 而在C 中使用它(或相反))。

該錯誤是因為當項目中混合了 .cpp 和 .c 檔案時,編譯器會對它們採取不同的編譯方式(主要是因為對函式宣告的處理方式不同),因而不能共用一個先行編譯標頭檔。在 VC++ 中,預設的先行編譯標頭檔是針對 C++ 的 (stdafx.h 和 stdafx.cpp),當然也可以建立針對 C 的先行編譯頭。有趣的是,在舊版的 VC++ 中,這個錯誤的提示很具有誤導性:fatal error C1853: 'xxx.pch' is not a precompiled header file created with this compiler. 常常讓人摸不著頭腦。應該說,在新版中的這個提示是有所改進的。不過在網上搜尋一番,對這個問題往往都是建議對整個項目取消先行編譯頭的設定。這顯然不是一個好的解決方案。對於一個比較大的工程來說,使用先行編譯頭可以使總的編譯時間大大減少。因而保留先行編譯頭的設定才是比較好的解決方案。搜尋 MSDN,針對不同的情況,可以有不同的解決方案:

:適用於絕大多數檔案是 .cpp 或絕大多數檔案是.c的情況。在這種情況下,將少數的不同類檔案設為不使用先行編譯頭是比較平衡的做法,方法是:對於 VC++6.0,在 FileView 裡對要取消先行編譯頭的 .c (或 .cpp) 檔案點右鍵,選擇 settings,在彈出的對話方塊右邊選擇 category 為 precompiled headers,再設定選項為 not using ...;對於 VS2005,則在 solution explorer 中對相應檔案點右鍵選擇 properties,在 precompiled headers 項下設定 not using... 即可。如果需要設定多個檔案,則可以按住 Ctrl 鍵再同時選中這些檔案並設定

:如果受影響的檔案比較多,則把它們都設定禁止先行編譯頭的話仍然會使項目總體的編譯速度大大降低,得不償失。這時考慮可以為這組檔案建立專用的先行編譯頭。在 VC++ 極早期版本(1.5及以前版本)中是支援單個工程中建立分別針對 .c 和 .cpp 的先行編譯頭的,但之後的版本中只支援單獨的先行編譯頭。在這種情況下,我們可以在workspace(或 solution)中建立一個新的靜態連結庫 (Static Library) 工程,將所有的 .c 檔案獨立出來加入到該工程中單獨編譯,這樣就可以在該靜態連結庫中針對 .c 檔案建立先行編譯頭。但是這樣做在一定程度上需要被獨立出來的代碼在邏輯上是屬於同一模組中的,這樣才便於維護。不過從設計的角度來說,這個要求一般是滿足的,否則就應考慮下項目的總體設計了:P 最後別忘了設定原項目的依賴項 (dependency) 為獨立出來的這個靜態庫項目。

 

錯誤3:

 

 錯誤提示:No certificates were found that met all the given criteria.

 

解決辦法:這是簽名錯誤,修改的辦法:在工程屬性的最後一個即簽名上面選擇不需要簽名。這樣就可以編譯過去。

 

 

錯誤4:

錯誤現象:VS2005中的Find In Files對話方塊無法開啟

解決辦法:法使開始->所有程式->Microsoft Visual Stdio 2005->Visual Studio Tools->Visual Studio 2005 Command Prompt 開啟運行。然後開始輸入devenv/ResetSettings運行。注意在進行整個操作之前需要將VS2005程式關閉。如果一次操作沒有效果,那麼多進行幾次就可以了。我自己的就是運行了三遍才有用的。(按照理論一次就可以通過)。這是我參考別人在論壇上的回答,具體可以參考以下網址,要求有英語基礎,否則別去。http://social.msdn.microsoft.com/Forums/en-US/vssetup/thread/a9ace617-d957-475f-8d4b-5d9e51402802



錯誤5:

PoomCalendar.obj : error LNK2001: unresolved external symbol __GSHandlerCheck
PoomMaster.obj : error LNK2001: unresolved external symbol __GSHandlerCheck

說明:

 


If you're a native C++ smart device developer and recently downloaded VS2005 SP1 you may find that some of your existing programs and some of the samples that ship with Windows Mobile SDK will fail to compile. Even if you're able to make them compile they may issue a warning like "warning LNK 4099: PDB 'libbmt.pdb was not found".

This is because VSD has updated the compilers for VS2005 SP1 to be on par with WinCE 6 compilers which included /GS support. So, for projects that don’t include libc/msvcrt or turn off /GS, you will run into these errors on pre-WinCE 6 platforms

As a workaround you should explicitly include "libcmt.lib" in the list of additional libs to link against and turn off the linker warning (/nowarn:4099).

 


錯誤6:


CVTRES : fatal error CVT1100: duplicate resource. type:ICON, name:1, language:0x0409 LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

解決方案:

 

在res,也就是資源檔中,倒數第二行,下面這句話注釋掉,就可以編譯通過了

CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "res//ControlMania1.exe.manifest"

 

說明:錯誤的原因是因為上面這些資源有雙份,導致編譯錯誤。具體的原因請參閱

http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/ca805bad-9893-483b-8482-6e6ccaa0a4f8/

以及微軟的http://msdn.microsoft.com/en-us/library/3k67zd6z(VS.80).aspx

這裡面就談到了不同低版本的程式在用高版本的編譯器進行編譯的時候可能產生的錯誤。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.