Для начала я понимаю, что здесь есть несколько вопросов об ошибках определения, но меня это озадачивает.
У меня есть модуль, который я разрабатываю, и я строю в отладке, т.е. -DDEBUG -g -O0
. Теперь, когда я хочу сделать релиз -DNDEBUG -Os
, я создаю и получаю ошибки компоновщика для нескольких определений нескольких определений STL, включая
- std :: basic_ios> :: basic_ios ()
- станд :: __ throw_bad_alloc ()
- std :: string :: assign (char const *) v
- * прочее * 1014
Я проверил свой проект, все заголовочные файлы имеют защиту #ifndef, и единственный код в заголовочных файлах объявляется встроенным.
Обдумывая, я обнаружил, что могу компилировать с -DNDEBUG -O0
, но не с любым уровнем оптимизации. Процесс сборки включает в себя создание около 2 дюжин объектов, а затем их объединение. Зачем оптимизация убивает компоновщик? и как я могу это исправить?
Здание с TDM MinGW 4.6.1.