【问题标题】:SFML2 static linking error with mingw32: undefined referencesSFML2 与 mingw32 的静态链接错误:未定义的引用
【发布时间】:2014-06-27 23:33:39
【问题描述】:

我在 64 位 Windows 7、MinGW 4.7.1 上使用 Code::Blocks。

我正在尝试让 SFML 2.1 在代码块中与 MingW 一起使用,但这会导致问题。

当我尝试编译时,我得到了这些错误:

_imp___ZN2sf6StringC1EPKcRKSt6locale的未定义引用

_imp___ZN2sf9VideoModeC1Ejjj的未定义引用

...

我正在链接以下库:

  • sfml 图形
  • sfml 窗口
  • sfml 系统

我做错了什么?错误说是未定义的引用,但我已经按照these instructions 一步一步来。

【问题讨论】:

    标签: c++ linker-errors sfml undefined-reference


    【解决方案1】:

    当尝试链接库的静态版本时,您基本上也必须使用标题的静态版本(否则您实际上是在错误的位置寻找引用(更具体地说:使用错误的格式/装饰))。

    因此,在链接静态版本时,请始终确保在包含任何 SFML 标头之前定义 SFML_STATIC

    另外,请确保链接库的静态版本(带有-s 后缀)。


    静态 SFML

    • 定义SFML_STATIC
    • 链接到 sfml-system-ssfml-window-ssfml-graphics-s 等(或其调试版本)。

    动态 SFML

    • 不要定义SFML_STATIC
    • 链接到 * sfml-system*、sfml-windowsfml-graphics 等(或其调试版本)。

    【讨论】:

    • 这次我在 SFML 标头之前定义了 SFML_STATIC,并将链接更改为:sfml-window-s、sfml-graphics-s、sfml-system-s,但仍然是同样的错误。顺便说一句,在我使用 sfml-system 等链接之前,我已经将 SFML DLL 复制到了我编译的可执行文件所在的目录。
    • 如果您要链接静态版本,则不需要 dll 文件。你确定你知道你在做什么? :)
    • thx,老实说,我不知道静态版和动态版的区别,你能不能给我推荐一本关于这些的好书,我想对其进行系统研究。非常感谢。
    • 库本质上是代码集合,因此可以重用代码。如果您使用的是静态库,那么只有您实际使用的代码部分会被复制到最终的二进制文件中(在链接时)。另一方面,如果您使用的是动态库,则代码保留在库文件中(例如 Windows 下的 dll 文件)。这些是核心 c/c++ 概念,您应该能够在几乎任何有关该语言的书籍中找到更多相关信息。
    猜你喜欢
    • 1970-01-01
    • 2015-01-24
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多