SDL2, ошибка LNK2005 объекты уже определены в libcmt

Так что это распространенная ошибка, но все посты говорят, что мне нужно уделять больше внимания тем версиям библиотек, которые я включаю. Я использую SDL2, OpenGL и SDL_Mixer... У меня нет никаких вариантов в том, что я включаю, кроме как придерживаться 32-битных библиотек.

Отладка компилируется нормально, но релиз дает мне ошибку LNK2005, если я не установил библиотеки времени выполнения на /MD. Я хотел бы избежать этой дополнительной зависимости. Получающийся исполняемый файл перестает отвечать на инициализации SDL или некоторые вызовы OpenGL, если Visual Studio не запускает сборку выпуска. Так что у меня возникла проблема с многопоточностью, но я не близок к ее пониманию. Маленькая помощь?

ОБНОВЛЕНИЕ: /FORCE:MULTIPLE позволяет компилировать проект с /MT. Но, как и в случае с /MD, исполняемый файл вылетает, если только Visual Studio не запустит сборку релиза. Что это значит?

ОБНОВЛЕНИЕ2: Используйте / MD в проектах SDL. Сбой был просто ошибкой памяти, отладчик не ловил. Связывание не было связано.

2 ответа

Решение

Итак, ваши единственные другие варианты, которые я вижу, это

(1) игнорирование другой библиотеки, которая вызывает ошибку LNK2005 (поскольку вы определяете что-то в двух местах, он не знает, какую использовать. Поскольку игнорирование libcmt.lib вызвало много проблем, возможно, попробуйте другое место, которое определяет метод).

2) Используйте /FORCE:MULTIPLE в параметрах командной строки вашего компоновщика, что позволит использовать несколько определений символа.

Является ли восстановление SDL вариантом? Если так

  • получить источник от libsdl.org
  • перейти в каталог VisualC
  • выберите соответствующее решение
  • оттуда для каждого проекта измените тип сборки с /MD на /MT
  • перестройка: теперь вы должны просто получить lib и DLL, которые построены как /MT и должны связываться с вашей программой, скомпилированной как /MT. Вам больше не нужно прибегать к / ignorelibs и / forcemultiple
Другие вопросы по тегам