Поделиться через


Предупреждение средств компоновщика LNK4210

Раздел разделов существует; могут быть необработанные статические инициализаторы или терминаторы

Замечания

В некоторых кодах появились статические инициализаторы или терминаторы, но код запуска библиотеки VCRuntime или его эквивалент (который должен выполнять статические инициализаторы или терминаторы), не выполняется при запуске приложения. Ниже приведены некоторые примеры кода, для которых требуются статические инициализаторы или терминаторы:

  • Переменная глобального класса с конструктором, деструктором или таблицей виртуальных функций.

  • Глобальная переменная, инициализированная с константой, отличной от компиляции.

Чтобы устранить эту проблему, попробуйте выполнить одно из следующих действий.

  • Удалите весь код со статическими инициализаторами.

  • Не используйте /NOENTRY. После удаления /NOENTRY может потребоваться удалить /NODEFAULTLIB из командной строки компоновщика.

  • Если сборка использует /MT, добавьте libcmt.lib, libvcruntime.lib и libucrt.lib в командную строку компоновщика. Если сборка использует /MTd, добавьте libcmtd.lib, vcruntimed.lib и libucrtd.lib.

  • При переходе из /clr:pure компиляции в /clr удалите параметр /ENTRY из строки компоновщика. Это позволяет инициализации CRT и позволяет выполнять статические инициализаторы при запуске приложения. Параметр компилятора /clr:pure не рекомендуется использовать в Visual Studio 2015 и не поддерживается в Visual Studio 2017.

Параметр компилятора /GS требует инициализации функцией __security_init_cookie . Эта инициализация предоставляется по умолчанию в коде запуска библиотеки VCRuntime, который выполняется в _DllMainCRTStartup.

  • Если проект построен с помощью /ENTRY, и если функция /ENTRY передается не _DllMainCRTStartupтак, функция должна вызываться _CRT_INIT для инициализации CRT. Этот вызов недостаточно, если библиотека DLL использует /GS, требует статических инициализаторов или вызывается в контексте кода MFC или ATL. Дополнительные сведения см. в библиотеках DLL и поведении библиотеки времени выполнения Visual C++.

См. также