Сборка Boost с нестандартными параметрами
От: MaxSem  
Дата: 09.09.11 05:21
Оценка:
VC 2010, потребовалось использовать Boost.ASIO. В дебаговом билде из-за тормозни откючены отладочные итераторы при помощи #define _HAS_ITERATOR_DEBUGGING 0

Буст собрался нормально, но при попытке его использования линкер выдаёт:
libboost_system-vc100-mt-sgd-1_46.lib(error_code.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in App.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in App.obj
1>C:\****\projectname.exe : fatal error LNK1319: 2 mismatches detected

Я так понимаю, что даже если пересоберу Boost, линкер всё равно ругнётся на несоответствие между ним и libcpmtd.lib.

Без дебагового билда не обойтись, отладочные итераторы включать нельзя — даже тестовые сборки обязаны нормально работать в реальном времени, чего при просаживании произвоительности на порядок не получится (смотрел исходники — там эти итераторы при каждом обращении дёргают критическую секцию, зомгвтф).

Что можно сделать в такой ситуёвине?
Re: Сборка Boost с нестандартными параметрами
От: jazzer Россия Skype: enerjazzer
Дата: 09.09.11 07:03
Оценка:
Здравствуйте, MaxSem, Вы писали:

MS>VC 2010, потребовалось использовать Boost.ASIO. В дебаговом билде из-за тормозни откючены отладочные итераторы при помощи #define _HAS_ITERATOR_DEBUGGING 0


MS>Буст собрался нормально, но при попытке его использования линкер выдаёт:

MS>libboost_system-vc100-mt-sgd-1_46.lib(error_code.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in App.obj
MS>libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in App.obj
1>>C:\****\projectname.exe : fatal error LNK1319: 2 mismatches detected

MS>Я так понимаю, что даже если пересоберу Boost, линкер всё равно ругнётся на несоответствие между ним и libcpmtd.lib.


Что такое libcpmtd.lib и почему оно зависит от бустовского флага? Или это не бустовский флаг?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: Сборка Boost с нестандартными параметрами
От: MaxSem  
Дата: 09.09.11 07:13
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Что такое libcpmtd.lib и почему оно зависит от бустовского флага? Или это не бустовский флаг?


libcpmtd.lib — стандартная либа рантайма, флаг — не бустовский, а STL-ный.
Re[3]: Сборка Boost с нестандартными параметрами
От: jazzer Россия Skype: enerjazzer
Дата: 09.09.11 08:23
Оценка:
Здравствуйте, MaxSem, Вы писали:

MS>Здравствуйте, jazzer, Вы писали:


J>>Что такое libcpmtd.lib и почему оно зависит от бустовского флага? Или это не бустовский флаг?


MS>libcpmtd.lib — стандартная либа рантайма, флаг — не бустовский, а STL-ный.


Может тогда линковаться с релизной версией рантайма (без буквы d в конце)?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Сборка Boost с нестандартными параметрами
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 09.09.11 10:32
Оценка:
Здравствуйте, MaxSem, Вы писали:

MS>VC 2010, потребовалось использовать Boost.ASIO. В дебаговом билде из-за тормозни откючены отладочные итераторы при помощи #define _HAS_ITERATOR_DEBUGGING 0


MS>Буст собрался нормально, но при попытке его использования линкер выдаёт:

MS>libboost_system-vc100-mt-sgd-1_46.lib(error_code.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in App.obj
MS>libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in App.obj
1>>C:\****\projectname.exe : fatal error LNK1319: 2 mismatches detected

MS>Я так понимаю, что даже если пересоберу Boost, линкер всё равно ругнётся на несоответствие между ним и libcpmtd.lib.


1) пересобрать буст c #define _HAS_ITERATOR_DEBUGGING 0

bjam --clean debug
bjam install --with-asio ... define="_HAS_ITERATOR_DEBUGGING=0"

2) Линковать релизный буст и ран-тайм, но выключить оптимизацию для своего кода, и включить генерацию отладочной информации

3) оптимизировать алгоритм.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.