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