unresolved external symbol _main

來源:互聯網
上載者:User

 

現象:

當你編譯一個ATL工程的Release版時,你得到了下面這個連結錯誤:   LIBCMT.LIB(crt0.obj) : error LNK2001: unresolved external symbol _main而Debug版本的編連卻順利通過。 出錯原因:如果你在工程中使用了CRT函數,而這些函數又需要CRT啟動代碼,就會出現這種連結錯誤。預設情況下,Release配置的Preprocessor definitions中定義了_ATL_MIN_CRT,它將CRT啟動代碼從你的EXE或DLL剔出去了。背景知識:1:

ATL支援把一個伺服器編連最佳化成最小尺寸或者依賴性最小。我們可以定義三個前置處理器符號來影響伺服器的最佳化。

_ATL_MIN_CRT             伺服器不連結標準的C/C++運行庫_ATL_DLL                  伺服器動態連結工具函數庫atl.dll_ATL_STATIC_REGISTRY    伺服器靜態連結對組件註冊的支援如果定義了前置處理器符號_ATL_MIN_CRT,那麼我們的伺服器不連結C/C++運行庫,並且ATL提供了函數malloc、realloc、new和delete的一個實現。當定義了這個符號時,我們不能調用任何其他的C/C++運行庫的函數。否則,就會受到這樣的待遇:LIBCMT.LIB(crt0.obj) : error LNK2001: unresolved external symbol _mainATL嚮導產生的ATL工程為所有的Release版本的編連定義了_ATL_MIN_CRT,但是沒有為Debug版本定義這個符號。Debug配置沒有定義這三個符號中的任何一個。RelMinSize配置定義了_ATL_MIN_CRT和_ATL_DLL。RelMinDependency配置定義了_ATL_MIN_CRT和_ATL_STATIC_REGISTRY。2:

C Run-Time Library (without iostream)

Characteristics

Option

Defined

LIBC.LIB

a statically linked library for single-threaded programs

(Single threaded, static link)

/ML

 

LIBCMT.LIB

a statically linked library that supports multithreaded programs

(Multithreaded, static link)

/MT

_MT

MSVCRT.LIB

Multithreaded, dynamic link (import library for MSVCRT.DLL)

/MD

_MT, _DLL

解決方案:下面方法中的任何一個都可以糾正這個錯誤:Ø         去除_ATL_MIN_CRT這個預先處理符號;Ø         開啟stdafx.cpp,注釋掉#include <atlimpl.cpp>這句話,然後編譯,即可;Ø         在工程的配置對話方塊的Link頁面上,"ignore libraries"編輯框中輸入Libcmt.lib,然後編譯

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.