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

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

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

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

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

1

Решение

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

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

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

1

Другие решения

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

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

По вопросам рекламы [email protected]