1. 程式人生 > >VC6.0編譯器常見錯誤及解決辦法

VC6.0編譯器常見錯誤及解決辦法

1.建立一個Win32 Application,建立一個C++ souce file,輸入以下程式碼:

編譯時出現以下錯誤:
Linking...
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol [email protected]
Debug/hello.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
這是子系統設定錯誤,我們應該選擇console子系統。解決辦法如下:
選擇Project->Settings->選擇“Link”標籤,將Project Options中的/subsystem:windows改為/subsystem:console。

2.建立一個Win32 Console Application,新增一個C++ Source file,輸入以下程式碼:

編譯時出現以下錯誤:
linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/hello.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
和上面類似,也是子系統設定錯誤,我們應該選擇windows子系統。解決辦法如下:
選擇Project->Settings->選擇“Link”標籤,將Project Options中的/subsystem:console改為/subsystem:windows。

3.編譯時出現如下錯誤:
error LNK2001:unresolved external symbol __chkesp
原因:新編譯器的堆疊檢查功能要求連結C 執行時庫,
解決方案:與其中一個 C 執行時庫連結;或者禁用編譯器堆疊檢查功能(刪除編譯器開關引數中的 /GZ),具體步驟是:選擇Project->Settings->選擇“C/C++”標籤,將Project Options中的"/GZ"去掉。
參考:http://support.microsoft.com/kb/191669

4. 程式入口設定錯誤, 提示:
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol

[email protected]
通常, MFC專案的程式入口函式是WinMain, 如果編譯專案的Unicode版本, 程式入口必須改為wWinMainCRTStartup, 所以需要重新設定程式入口:
[Project] --> [Settings] --> 選擇"Link"屬性頁,在Category中選擇Output,再在Entry-point symbol中填入wWinMainCRTStartup, 即可

5. 執行緒執行時庫設定錯誤, 提示: 
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
這是因為MFC要使用多執行緒時庫, 需要更改設定:
[Project] --> [Settings] --> 選擇"C/C++"屬性頁,在Category中選擇Code Generation,再在Use run-time library中選擇Debug Multithreaded或者multithreaded
其中,
Single-Threaded                單執行緒靜態連結庫(release版本)
Multithreaded                    多執行緒靜態連結庫(release版本)
multithreaded DLL             多執行緒動態連結庫(release版本)
Debug Single-Threaded     單執行緒靜態連結庫(debug版本)
Debug Multithreaded         多執行緒靜態連結庫(debug版本)
Debug Multithreaded DLL  多執行緒動態連結庫(debug版本)
單執行緒: 不需要多執行緒呼叫時, 多用在DOS環境下
多執行緒: 可以併發執行
靜態庫: 直接將庫與程式Link, 可以脫離MFC庫執行
動態庫: 需要相應的DLL動態庫, 程式才能執行
release版本: 正式釋出時使用
debug版本: 除錯階段使用