Как собрать Notepad++ с помощью Visual C++ 2010 Express?

Windows SDK установлен. Раньше я успешно создавал N++ с помощью Visual C++ 2008 Express. Но теперь с 2010 у меня много сообщений об ошибках sprintf_s:

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\string(676): error C2039: 'sprintf_s' : is not a member of '`global namespace''
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\string(676): error C3861: 'sprintf_s': identifier not found

Пожалуйста помоги.


person thorn0    schedule 14.09.2010    source источник


Ответы (3)


В проект включен лист свойств с именем no_ms_shit.props (после преобразования). В этом листе выражено изрядное количество ненависти к тому, что MS пытается сделать в течение последних 5 лет.

Они немного переборщили с отключением всего, они даже отключили привязку к sprintf_s(). Что является источником вашей ошибки, заголовок stdio.h опускает объявление, но заголовок строки использует его. Не уверен, поддерживает ли версия Express редактирование листов свойств проекта, но шаг в розничной версии:

  • Просмотр + менеджер свойств
  • Откройте один из узлов и найдите «без мс дерьмо»
  • Щелкните правой кнопкой мыши, Свойства
  • C/C++, препроцессор, определения препроцессора
  • Измените __STDC_WANT_SECURELIB__=0 на 1
  • Добавьте _CRT_SECURE_NO_WARNINGS к этим определениям.

Теперь проект компилируется. Я получаю ошибку сборки для копирования файлов, это событие после сборки. Начните другой вопрос, если вы не можете понять, как это исправить.

person Hans Passant    schedule 14.09.2010
comment
Спасибо! В версии Indeed Express нет менеджера свойств. Но я нашел, где изменить эти настройки препроцессора (Project + Properties + Configuration Properties...). Сейчас строит. - person thorn0; 15.09.2010

Странный. У меня есть Visual Studio 2010 Ultimate, и он даже не позволяет мне получить доступ к пункту меню View->Property Pages. Он у меня отключен.

Но я просто зашел в файл no_ms_shit.props и отредактировал его только в Notepad++ :). Затем перейдите в «Проект» -> «Свойства» -> «Свойства конфигурации» -> «Общие» и выберите «Нет», чтобы рассматривать предупреждения как ошибки, и добавили _CRT_SECURE_NO_WARNINGS в определения препроцессора.

Дон Хо должен плыть по течению, а не проклинать мс дерьмо, когда он разрабатывает в Windows и Visual Studio.


Это сработало для меня при использовании Visual Studio 2012 Professional:

  • Вы должны отредактировать no_ms_shit.vsprops (*.vsprops, а не только *.props!):
    заменить __STDC_WANT_SECURE_LIB__=0 на __STDC_WANT_SECURE_LIB__=1

  • Добавьте _CRT_SECURE_NO_WARNINGS в определения препроцессора.

person Piyush Soni    schedule 01.11.2010
comment
Этот ответ помог мне в VS2010. - person Myanju; 04.11.2014

Более пристальный взгляд на источник покажет, что большинство вызовов библиотек, вызывающих бесконечный шум, если только вы не используете эту страницу свойств, исходят из проекта SciLexer.dll. Scintilla является кросс-платформенной, поэтому ей не нужны все специфичные для Windows мелочи. Как вы упомянули, Microsoft переборщила с заменой стандартной библиотеки строк, настолько законной, насколько может быть их попытка избежать переполнения буфера.

Так что вы можете адресовать эту критику Нилу Ходжсону (главному разработчику Scintilla), а не Дону Хо.

CChris

person cchris    schedule 06.12.2010