如何使用cl.exe链接静态库? (指定RuntimeLibrary)

时间:2015-01-20 22:54:15

标签: c++ sfml cl

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?

2 个答案:

答案 0 :(得分:0)

您可能需要运行时库的多线程动态发布版本。使用/ MD标志。有关控制要链接的运行时库版本的标志的更多信息,请参阅here

问题是sfml-graphics-s.lib链接到运行时库的多线程动态发布版本,而命令行指示链接到该库的多线程,静态,发布版本(你是使用/ MT开关)。将/ MT替换为/ MD,应解决冲突。

答案 1 :(得分:0)

  

如果在项目设置中选择MT_StaticRelease,则您使用的任何库也必须使用此参数。不幸的是,SFML是使用MD_DynamicRelease(最常见和安全的选择)编译的,因此作为/ lib中的eXpl0it3r库。但是,eXpl0it3r还提供了使用MT_StaticRelease

编译的SFML库

此外,我需要链接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