Как связать статическую библиотеку, используя cl.exe? (Указание RuntimeLibrary)

cl -MT -DSFML_STATIC main.cpp freetype.lib gdi32.lib glew.lib jpeg.lib openal32.lib opengl32.lib sfml-audio-s.lib sfml-graphics-s.lib sfml-network-s.lib sfml-system-s.lib sfml-window-s.lib sndfile.lib winmm.lib

Результат:

sfml-graphics-s.lib<Color.cpp.obj> : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MT_StaticRelease' in main.obj

Как мне указать RuntimeLibrary?

3

Решение

Возможно, вам нужна многопоточная динамическая версия библиотеки времени выполнения. Используйте флаг / MD. Увидеть Вот для получения дополнительной информации о флагах, которые контролируют, с какой версией библиотеки времени выполнения ссылаться.

Проблема заключается в том, что sfml-graphics-s.lib связан с многопоточной динамической версией библиотеки времени выполнения, в то время как ваша командная строка указывает на связь с многопоточной статической версией этой библиотеки (вы используете / MT переключатель). Замените / MT на / MD, и конфликт должен быть разрешен.

0

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

Если вы выберете MT_StaticRelease в настройках вашего проекта, любая библиотека, которую вы используете, также должна использовать этот параметр. К сожалению, SFML скомпилирован с MD_DynamicRelease (наиболее распространенный и безопасный выбор), так же как библиотеки eXpl0it3r’s в / lib. Однако eXpl0it3r также предоставляет библиотеки SFML, скомпилированные с MT_StaticRelease.

Дополнительно мне нужно было связать user32.lib и advapi32.lib

cl -EHsc -FC -Zi -MT -DSFML_STATIC main.cpp advapi32.lib freetype.lib gdi32.lib glew.lib jpeg.lib openal32.lib opengl32.lib sfml-audio-s.lib sfml-graphics-s.lib sfml-network-s.lib sfml-system-s.lib sfml-window-s.lib sndfile.lib user32.lib winmm.lib
0