【问题标题】:How do I link a static library using cl.exe? (Specifying RuntimeLibrary)如何使用 cl.exe 链接静态库? (指定 RuntimeLibrary)
【发布时间】:2015-03-19 08:23:55
【问题描述】:
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?

【问题讨论】:

  • 如果您学会使用一些管理构建过程的工具,您将受益更多。 cmake 使用最广泛。完整的选择你可以找到here

标签: c++ sfml cl


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果您在项目设置中选择 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多