Включение / выключение SAFESEH в VC11?

Я создал новое решение для zlib 1.2.7, настроил его как статическую библиотеку, добавил необходимые заголовки и исходные файлы из ./zlib/contrib/minizip и получил его для компиляции просто замечательно. Затем я связал его с libpng (также как статический lib), который также компилируется отлично. Затем я связал libpng с моим проектом графического движка (также статической библиотекой)... еще нет ошибок.

но как только я связываю свой основной проект с моим графическим движком, я получаю несколько ошибок LNK2026 относительно CRC32 в.параметр obj, сдуваться.параметр obj, раздувать.параметр obj, d3dxplane.параметр obj, d3dxvec4.параметр obj и другие модули, связанные с zlib/directx. Он говорит мне, что они исходят из моего графического движка lib, поэтому я решил исправить это, добавив /SAFESEH:NO мои флаги компоновщика для соответствующих проектов.
примечание: Я должен, вероятно, заявить, что все проекты настроены на x86, а не x64.

проблема, однако, теперь я получение:
warning LNK4044: unrecognized option '/SAFESEH'; ignored те же самые ошибки LINK2026 в мой основной проект.
Если я открою командную строку visual studio и наберу LINK /? подтверждает, что /SAFESEH является допустимым параметром компоновщика. Я получаю ту же ошибку, когда использую /SAFESEH (без ':NO'), и если я опущу его полностью, то мой основной проект просто откажется от сборки.

что здесь происходит? Как мне обойти это?

3 ответов


добавив /SAFESH: NO в мои флаги компоновщика


быстрый Google показывает это указывает на необходимость перекомпиляции модулей-нарушителей с соответствующими настройками компилятора.

обратите внимание, что этот флаг работает только для целей x86. Если вы нацелены на 64-бит, вы получите эту ошибку независимо.

с http://msdn.microsoft.com/en-us/library/9a89h429(в=против 80).аспн, которые могут иметь значение:

наиболее распространенная причина, по которой компоновщик не может производить - изображение связано с тем, что один или несколько входных файлов (модулей) компоновщик не совместим с функцией обработчиков безопасных исключений. Ля общая причина несовместимости модуля с безопасным исключением обработчики-это потому, что он был создан с помощью компилятора предыдущей версия Visual C++.

было бы полезно, если бы вы предоставили номера версий вашего компилятора и как была построена ваша копия zlib (вы построили ее сами, и если да, то с тем же компилятор?).


В Visual Studio 2017 Щелкните правой кнопкой мыши проект - > свойства - > свойства конфигурации - > Компоновщик - > все параметры - > Изображение имеет Безопасные обработчики исключений = нет (/SAFESEH:нет) enter image description here