Невозможно добавить определения для повышения сборки

Я пытаюсь построить отладочную сборку Boost-сериализации / файловой системы / системы, используя Boost-buildsystem. Вот что я использую:

  b2 serialization filesystem system variant=debug link=static threading=multi
runtimelink=static define=_HAS_ITERATOR_DEBUGGING=0 toolset=msvc-11.0

Однако, когда я включаю библиотеку в мои проекты отладочной визуальной студии, я все равно получаю ошибки, подобные этой:

(basic_iarchive.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in Game.obj

Что заставляет меня верить, что мое «определение» в буст-билде не имело никакого эффекта. Какой правильный синтаксис? Я не могу найти никаких примеров, и в документации ничего не сказано по этому вопросу.

РЕДАКТИРОВАТЬ: я хотел бы убедиться, что я хочу определить _HAS_ITERATOR_DEBUGGING = 0 в моей сборке Boost

2

Решение

_ITERATOR_DEBUG_LEVEL не вещь Boost, но часть стандартной реализации библиотеки, которая поставляется с MSVC. Вы должны быть очень внимательны, чтобы компилировать все в вашей сборке с постоянным значением этого параметра. Во многих случаях нарушение диагностируется компоновщиком, как сообщение, которое вы цитируете, к сожалению, оно может остаться незамеченным. Так как он меняет размер и расположение большинства стандартных коллекций и связанных с ними вещей, угадайте, что будет дальше.

По умолчанию для него ничего не установлено, и когда вы включаете какой-то стандартный заголовок, он ищет _DEBUG и устанавливает себя в 2. Хороший способ, если ничего в системе никогда не устанавливает его и вы последовательно используете _DEBUG.

С надписью boost я не знаком, но предположил бы, что указанная вами настройка приведёт макрос к значению 0. Если это так, неудивительно, что у вас есть расхождение. Установите значение 2 или, если вы имеете в виду 0, используйте его во всех своих проектах.

0

Другие решения

Добавление define=_ITERATOR_DEBUG_LEVEL=0 работает для меня, как прокомментировал Игорь.

_HAS_ITERATOR_DEBUGGING затем определяется заголовками MS на основе вышеуказанного параметра, поэтому не следует пытаться установить его напрямую.

Установка в 0 значительного улучшения производительности отладки в некоторых случаях (в режиме реального времени 3d), так что есть определенные варианты использования, которые говорят об этом, даже несмотря на боль повторной компиляции всех библиотек DLL, которые представляют STL-контейнеры / итераторы в их интерфейсах.

0

По вопросам рекламы [email protected]