Проблема компиляции libjson в конфигурации "Release" с VS2010 - PullRequest
4 голосов
/ 21 июля 2011

Я скачал пакет libjson и добавил его в папку с проектами VS2010.Я создал новый проект с именем checkJson и добавил следующий код:

#include "../../libjson/libjson.h"
int main(){ return 0;}

При компиляции я получаю сообщение об ошибке: «Выпустить сборку libjson, но NDEBUG не включен»

После этогоВпервые я использую Visual Studio, и я думаю, что здесь у меня есть очень существенная ошибка.Не могли бы вы мне помочь?

Более того, если есть проблема с этим пакетом, или если вы знаете какие-то другие пакеты синтаксического анализа json, которые я мог бы использовать без множества проблем конфигурации, мне все равно, использовать их вместоэтот пакет.

Ответы [ 4 ]

1 голос
/ 12 сентября 2011

Добавить JSON_DEBUG к настройкам препроцессора может спасти вас. но я встречаю другую ошибку msg:

error C2059: syntax error : ''  

и

//#define JSON_DEPRECATED_FUNCTIONS 
1 голос
/ 21 июля 2011

Visual Studio добавит директиву NDEBUG в настройки препроцессора проекта при его создании. Возможно, что где-то вдоль линии это было удалено или изменено. Зайдите в свойства проекта и выберите соответствующую конфигурацию (в данном случае «Релиз»). Затем перейдите в Configuration Properties -> C/C++ -> Preprocessor. Вверху вы увидите Preprocessor Directives. В этом свойстве убедитесь, что NDEBUG присутствует. Если не добавить это. Обратите внимание, что это свойство будет содержать несколько определений препроцессора, каждое из которых будет разделено точкой с запятой. Например, в 32-битном консольном приложении Windows вы увидите что-то вроде этого -

WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions).

Делайте , а не . Добавляйте #define NDEBUG к любому заголовку или исходному файлу в вашем проекте, если вы не знаете, что делаете. Если вы не заключите его в соответствующие директивы # ifdef / # endif, это может вызвать проблемы с не-релизными сборками.

1 голос
/ 21 июля 2011

Для начала попробуйте скомпилировать ваш проект в конфигурации "Release".

Если он работает (и я верю, что это должно), вы можете попытаться определить переменную NDEBUG даже в конфигурации отладки.Но это может привести к неожиданным результатам!

0 голосов
/ 21 июля 2011

Есть ли предупреждение как «Предупреждение C4603:« NDEBUG »: макрос не определен или определение отличается после предварительно скомпилированного заголовка».?

Если да, то просто поместите #define NDEBUG ПОСЛЕ #include "stdafx.h" или переместите его в stdafx.h

Я также должен был прокомментировать строку #define JSON_DEPRECATED_FUNCTIONS в JSONOptions.h, но после этого я по крайней мере смог компилировать.

...