【问题标题】:SFML: undefined reference to _imp_ [closed]SFML:对 _imp_ 的未定义引用 [关闭]
【发布时间】:2018-07-17 14:49:15
【问题描述】:

我正在尝试使用 SFML 创建 C++ 应用程序。按照教程,为 Windows 安装了 MinGW。我的项目在其根文件夹中有一个 main.cpp 文件,并且 SFML 包含在 lib/sfml 中(相对于 main.cpp)。

我可以使用命令g++ -c main.cpp -g -o build/debug/game.o -Ilib/sfml/include 毫无问题地编译

但是当我尝试使用命令 g++ build/debug/game.o -o build/debug/game.exe -Llib/sfml/lib -lsfml-graphics-d -lsfml-window-d -lsfml-system-d 链接时,我得到未定义的引用

一些错误:

C:\Users\andre\Documents\Repos\Game/main.cpp:5: undefined reference to `_imp___ZN2sf6StringC1EPKcRKSt6locale'
C:\Users\andre\Documents\Repos\Game/main.cpp:5: undefined reference to `_imp___ZN2sf9VideoModeC1Ejjj'
C:\Users\andre\Documents\Repos\Game/main.cpp:5: undefined reference to `_imp___ZN2sf12RenderWindowC1ENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE'

我已经搜索过了,但似乎没有任何帮助。我发现奇怪的是,在某些以前版本的 SFML 中,它在 lib 文件夹中带有更多库,例如 opengl32.lib。不过,它说,例如,我需要 sfml-graphics:

sfml-window-s.lib
sfml-system-s.lib
opengl32.lib
freetype.lib
jpeg.lib

唯一缺少的是opengl32.lib。如果我考虑 sfml-system 和 sfml-window,它也缺少 winmm.lib、gdi32.lib。我不知道这是否与错误有关,但欢迎提供任何帮助。

【问题讨论】:

  • 可能是你库的顺序不对,可能顺序应该是:窗口、图形、系统?你知道这些符号是在哪个库中定义的吗?用在哪一个?
  • 仍然错误。不,我只是按照教程进行操作。

标签: c++ gcc linker g++ sfml


【解决方案1】:

解决了,我的错误。几天前我下载了 Visual C++ 编译器的 SFML 版本,但后来我放弃了 Visual Studio 2017 并决定将 Visual Studio Code 与 GCC 一起使用。所以我尝试使用我认为正确的 SFML。现在我已经下载了正确的版本,它运行良好。

【讨论】:

    【解决方案2】:

    如果您要链接 SFML 的静态版本,SFML 的头文件必须知道这一点(因为函数签名略有变化)。因此,在包含任何 SFML 标头之前,您必须在某处定义 SFML_STATIC,最好是作为项目、制作文件或构建系统的一部分。

    此外,您必须确保将正确版本的库与您实际要使用的库链接起来。

    以系统库为例:

    • sfml-system 是库的共享发布版本。
    • sfml-system-d 是库的共享 debug 版本。
    • sfml-system-s 是库的static release build。
    • sfml-system-s-d 是库的 static debug 版本。

    如果您要链接 SFML 的静态版本,则只需链接 SFML 的依赖项(例如 OpenGL)。

    SFML 从未与 OpenGL 一起提供,您可能会将其与 OpenAL-soft 混淆。无论哪种方式,您缺少的其他库文件要么由您的工具链/系统(如 OpenGL 或 mmsystem)提供,要么可以在 SFML 的 extlibs/libs 文件夹中找到预编译的(取决于您是否自己下载或编译了 SFML)。

    【讨论】:

    • 我没有使用静态版本,正如您在我的命令中看到的那样,我正在链接共享调试版本。尽管如此,我还是遇到了这些错误。
    猜你喜欢
    • 2014-10-25
    • 1970-01-01
    • 2017-03-11
    • 2015-02-14
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多