共用方式為


連結器工具警告 LNK4210

區段 存在;可能有未處理的靜態初始化運算式或結束字元

備註

有些程式碼引進了靜態初始化運算式或結束字元,但 VCRuntime 程式庫啟動程式碼或其對等程式碼(需要執行靜態初始化運算式或結束字元)不會在應用程式啟動時執行。 以下是一些需要靜態初始化運算式或結束字元的程式碼範例:

  • 具有建構函式、解構函式或虛擬函式資料表的全域類別變數。

  • 使用非編譯時間常數初始化的全域變數。

若要修正此問題,請嘗試下列其中一項:

  • 移除具有靜態初始化運算式的所有程式碼。

  • 請勿使用 /NOENTRY 。 移除 /NOENTRY 之後,您可能也必須從連結器命令列移除 /NODEFAULTLIB

  • 如果您的組建使用 /MT,請將 libcmt.lib、libvcruntime.lib 和 libucrt.lib 新增至您的連結器命令列。 如果您的組建使用 /MTd,請新增 libcmtd.lib、vcruntimed.lib 和 libucrtd.lib。

  • 從 /clr:pure 編譯移至 /clr 時,請從連結器行移除 /ENTRY 選項。 這可啟用 CRT 初始化,並允許在應用程式啟動時執行靜態初始化運算式。 Visual Studio 2015 中已淘汰 /clr:pure 編譯器選項,Visual Studio 2017 不支援。

/GS 編譯器選項需要函 __security_init_cookie 式的初始化。 此初始化預設會在 中 _DllMainCRTStartup 執行的 VCRuntime 程式庫啟動程式碼中提供。

  • 如果您的專案是使用 /ENTRY 建置的,而且如果 /ENTRY 是傳遞以外的 _DllMainCRTStartup 函式,則此函式必須呼叫 _CRT_INIT 以初始化 CRT。 如果您的 DLL 使用 /GS、需要靜態初始化運算式,或在 MFC 或 ATL 程式碼的內容中呼叫此呼叫就不足。 如需詳細資訊,請參閱 DLL 和 Visual C++ 執行時間程式庫行為

另請參閱