2012-01-24 7 views
2

Для начала я понимаю, что здесь есть несколько вопросов с ошибкой определения, но я все это смущаю.Ошибка компоновщика C++ с несколькими уровнями оптимизации с уровня оптимизации

У меня есть модуль, который я разрабатываю, и я строил в отладке, то есть -DDEBUG -g -O0. Теперь, когда я хочу сделать релиз -DNDEBUG -Os я строю, и я получаю ошибки компоновщика для нескольких определений нескольких определений STL включая

  • StD :: basic_ios> :: basic_ios()
  • станд :: __ throw_bad_alloc()
  • станд :: строка :: правопреемник (символ сопз *) v
  • так далее

Я проверил мой проект, все файлы заголовки имеют #ifndef охраны и только код в заголовочных файлах объявлен инлайн.

В беспорядке я нахожу, что могу скомпилировать с -DNDEBUG -O0, но не с любым уровнем оптимизации. Процесс сборки включает в себя создание около 2 дюжин объектов, а затем их объединение. Почему оптимизация убивает компоновщика? и как я могу это исправить?

Здание с TDM MinGW 4.6.1.

ответ

0

Эта проблема также повторяется при включении файлов отладки MFC в режиме деблокирования или наоборот. Это может быть проблема с - это просто дикая догадка.

Для того, чтобы решить, что я предполагаю, что является причиной, сделайте следующее:

#ifdef _DEBUG 
#define DEBUG_WAS_DEFINED 
//include files that give you multiple definitions here 
#endif 

//..... 
//..... 
//rest of code/includes 

#ifdef DEBUG_WAS_DEFINED 
#undef DEBUG_WAS_DEFINED 
#define _DEBUG //revert to previous state 
#endif 

Вы можете посмотреть по этой ссылке: http://www.flounder.com/debug_release.htm, раздел о Mixed библиотек.

+0

Как я уже сказал в вопросе, я не могу найти файлы проблем. Любая помощь, чтобы выяснить, какие файлы являются проблемами детей? –

+0

@AndrewRedd вы включаете в себя любые заголовки MFC? Вы можете, конечно, попытаться удалить файлы, пока не найдете источник. –

+0

Я не думаю, что проблема смешанных dll имеет к этому какое-то отношение. Я полностью строю от чистого, а не смешивания отладки и выпуска. –

Смежные вопросы