Включение / выключение 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 ответов
быстрый Google показывает это указывает на необходимость перекомпиляции модулей-нарушителей с соответствующими настройками компилятора.
обратите внимание, что этот флаг работает только для целей x86. Если вы нацелены на 64-бит, вы получите эту ошибку независимо.
с http://msdn.microsoft.com/en-us/library/9a89h429(в=против 80).аспн, которые могут иметь значение:
наиболее распространенная причина, по которой компоновщик не может производить - изображение связано с тем, что один или несколько входных файлов (модулей) компоновщик не совместим с функцией обработчиков безопасных исключений. Ля общая причина несовместимости модуля с безопасным исключением обработчики-это потому, что он был создан с помощью компилятора предыдущей версия Visual C++.
было бы полезно, если бы вы предоставили номера версий вашего компилятора и как была построена ваша копия zlib (вы построили ее сами, и если да, то с тем же компилятор?).