MFC 編譯連接時產生錯誤及解決辦法

 在創建MFC項目時,   不使用MFC   AppWizard嚮導,   如果沒有設置好項目參數,   就會在編譯時產生很多連接錯誤,   error   LNK2001錯誤,   典型的錯誤提示有:  

  libcmtd.lib(crt0.obj)   :   error   LNK2001:   unresolved   external   symbol   _main  
  LIBCD.lib(wincrt0.obj)   :   error   LNK2001:   unresolved   external   symbol   _WinMain@16  
  msvcrtd.lib(crtexew.obj)   :   error   LNK2001:   unresolved   external   symbol   _WinMain@16  
  nafxcwd.lib(thrdcore.obj)   :   error   LNK2001:   unresolved   external   symbol   __beginthreadex  
  nafxcwd.lib(thrdcore.obj)   :   error   LNK2001:   unresolved   external   symbol   __endthreadex  
 
下面介紹解決的方法:  
  1.   Windows
子系統設置錯誤,   提示:  
  libcmtd.lib(crt0.obj)   :   error   LNK2001:   unresolved   external   symbol   _main  
  Windows
項目要使用Windows子系統,   而不是Console,   可以這樣設置:  
  [Project]   -->   [Settings]   -->  
選擇"Link"屬性頁,  
 
Project   Options中將/subsystem:console改成/subsystem:windows    
  2.   Console
子系統設置錯誤,   提示:  
  LIBCD.lib(wincrt0.obj)   :   error   LNK2001:   unresolved   external   symbol   _WinMain@16  
 
控制檯項目要使用Console子系統,   而不是Windows,   設置:  
  [Project]   -->   [Settings]   -->  
選擇"Link"屬性頁,  
 
Project   Options中將/subsystem:windows改成/subsystem:console  
  3.  
程序入口設置錯誤,   提示:  
  msvcrtd.lib(crtexew.obj)   :   error   LNK2001:   unresolved   external   symbol   _WinMain@16  
 
通常,   MFC項目的程序入口函數是WinMain,   如果編譯項目的Unicode版本,   程序入口必須改爲wWinMainCRTStartup,   所以需要重新設置程序入口:  
  [Project]   -->   [Settings]   -->  
選擇"Link"屬性頁,  
 
Category中選擇Output,  
 
再在Entry-point   symbol中填入wWinMainCRTStartup,   即可  
  4.  
線程運行時庫設置錯誤,   提示:  
  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
版本:   調試階段使用

發佈了3 篇原創文章 · 獲贊 0 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章