Ошибка связи при изменении конфигурации от отладки до выпуска

Привет У меня есть проект В VС++ 2008 этот проект компилируется в режиме отладки без ошибок но когда я пытаюсь построить его в режиме выпуска, я получаю ссылку на ссылку erorr.

1>Linking...
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __heap_alloc already defined in LIBCMT.lib(malloc.obj)
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __recalloc already defined in LIBCMT.lib(recalloc.obj)
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __msize already defined in LIBCMT.lib(msize.obj)
1>LIBCMTD.lib(malloc.obj) : error LNK2005: _V6_HeapAlloc already defined in LIBCMT.lib(malloc.obj)
1>LIBCMTD.lib(dbghook.obj) : error LNK2005: __crt_debugger_hook already defined in LIBCMT.lib(dbghook.obj)
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: ___sbh_pHeaderDefer already defined in LIBCMT.lib(sbheap.obj)
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: __get_sbh_threshold already defined in LIBCMT.lib(sbheap.obj)
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: __set_sbh_threshold already defined in LIBCMT.lib(sbheap.obj)
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: __set_amblksiz already defined in LIBCMT.lib(sbheap.obj)
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: __get_amblksiz already defined in LIBCMT.lib(sbheap.obj)......

как я могу это исправить? спасибо.

Ответ 1

Вы смешиваете время выполнения VS. Убедитесь, что для Project и всех библиотек, к которым вы ссылаетесь, установлена ​​настройка "Project Properties/С++/Code Generation/Run-time Library".

Ответ 2

У меня была такая же проблема, как и вы. Причина этой проблемы заключается в том, что Linker включает в себя множество библиотек, которые вы не видите (например, вы включите windows.h, включая windef.h и т.д.)..). И поскольку эти файлы не защищены от идиотов (#ifndef отсутствует), компоновщик будет пытаться #define делать то же самое больше раз, чем один раз.

Мое решение установило это поле: Свойства проекта → Linker → Input → Игнорировать определенную библиотеку

" libcmt.lib"

С этим ваш компоновщик будет игнорировать также в конфигурации выпуска, что проблемная библиотека, которая включена по умолчанию, и все должно работать..: -)

Иметь хороший день..: -)

P.S. Если вы хотите избежать недопонимания этих компоновщиков, продолжайте настраивать проект не в конфигурации отладки или выпуска, а в "Все конфигурации". Эта опция находится в левом верхнем углу конфигурации проекта.

Ответ 3

Вы связываете файл .obj или .lib, который был скомпилирован в конфигурации Debug. Лучше всего сделать так, чтобы файл также был создан в режиме выпуска. Лучше всего сказать компоновщику игнорировать запрос на ссылку на libcmtd.lib. Project + Properties, Linker, Input, Ignore Specific Library = libcmtd.lib. Но делайте это только в том случае, если вы не можете получить сборку .Lib Release после попытки сильно.

Ответ 4

вы можете удалить определение препроцессора "DEBUG", чтобы решить вашу проблему.

Ответ 5

Я столкнулся с подобной проблемой, и все это связано с тем, будут ли библиотеки, которые вы включаете, строить с правильным конечным состоянием. Если вы создаете программу в режиме выпуска и указываете на *.lib файлы, скомпилированные в режиме отладки. он собирается дать вам ошибки совпадения символов. Специально, если ваша программа строит штрафы в режиме отладки или наоборот.

Это может быть не совсем то, что ваша проблема, но хорошая информация для тех, кто столкнулся с тем же, что и я.

Ответ 6

Вероятно, вы определили всю информацию о ссылке в конфигурации "Отладка". Это означает, что вам нужно либо переопределить его для "Release", либо переместить его в "Все конфигурации", чтобы его общий.