共用方式為


連結器工具警告 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++運行時間連結庫行為

另請參閱