【问题标题】:(SFML, Code::Blocks) "undefined reference to (...)" error upon Texture.importFromFile(...)(SFML,Code::Blocks)Texture.importFromFile(...)出现“未定义引用(...)”错误
【发布时间】:2018-03-05 18:06:51
【问题描述】:

我决定尝试this YouTube video 中描述的内容(使用 C++ 构建俄罗斯方块游戏)(我 提及视频以供参考)。

我有 Code::Blocks 17.12。我从their download page 安装了 SFML(GCC 4.9.2 TDM (SJLJ) - 32 位),并且由于“编译器必须匹配 100%”,我还从上提供的链接中安装了 TDM 4.9.2(32 位)他们的下载页面(在某种程度上忽略此细节而遇到错误之前),并将其设置为我在 Code::Blocks 中的编译器。

我按照 SFML 页面上的教程进行操作。我遇到了几个错误,但设法修复了它们(例如前面括号中提到的那个......等等)。一切都很顺利,所以我继续使用 YouTube 视频中显示的代码。在代码所在的地方

#include <SFML/Graphics.hpp>
#include <time.h>
using namespace sf;

int main()
{
   RenderWindow window(VideoMode(320, 480), "window");

   Texture t;
   t.loadFromFile("images/tiles.png");

   Sprite s(t);

   while (window.isOpen())
   {
       Event e;
       while (window.pollEvent(e))
       {
           if (e.type == Event::Closed)
           window.close();
       }
       window.clear(Color::White);
       window.display();
   }

   return 0;
}

(记录)我得到了错误

||=== Build: Release in Tetris (compiler: GNU GCC Compiler) ===|
obj\Release\main.o:main.cpp:(.text.startup+0x24c)||undefined reference to `_imp___ZN2sf7Texture12loadFromFileERKNSt7__cxx1112basic_stringIcSt11char_traits
IcESaIcEEERKNS_4RectIiEE'|
||error: ld returned 1 exit status|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 3 second(s)) ===|

这是我的问题。

An answer to a related SO question 建议我理解为“您必须在 C::B 中使用相同的 编译器作为用于编译 SMFL 的编译器”。但是我想我已经确保了这一点。

Another related SO question我读了但什么都看不懂。我是一个总 对 C/C++ 的菜鸟,除了勤奋、轻率地跟随之外,别无他法 例如,在 SFML 网站的教程中提供了指导......所以如果有人可以帮助我,我将不胜感激 - 可以让它工作还是我必须自己构建 SFML?

编辑:Here 是我的链接器设置的屏幕截图。

【问题讨论】:

  • 您可能没有正确链接 SFML 库。 SFML 下载中应该包含一个 .a 文件。转到您的项目并将此 .a 文件添加到您的链接器设置中
  • SFML 教程的一节说:“下一步是将您的应用程序链接到您的代码将需要的 SFML 库(.a 文件)。SFML 由 5 个模块(系统、窗口,图形,网络和音频),并且每个都有一个库。必须将库添加到项目构建选项中的“链接库”列表中,在“链接器设置”选项卡下。添加您需要的所有 SFML 库,例如“sfml-graphics”、“sfml-window”和“sfml-system”(必须省略“lib”前缀和“.a”扩展名)。” 这会是你认为我错了吗?
  • Here 是上述教程的链接。我相信我完全按照本教程那部分中的描述遵循了该部分(我可以详细说明这一说法)。
  • 是的,我相信那是你弄错的部分。使用附加的链接器设置更新您的问题
  • 好的。它在帖子的末尾。

标签: c++ codeblocks sfml


【解决方案1】:

使用您在 cmets 中提供的this link,您的链接器设置看起来应该如下:

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

我在尝试使用 SFML 时遇到了与此类似的问题,问题在于正确顺序的链接器设置。

【讨论】:

  • 啊,我明白了。我将尝试并报告。我略读了本教程的那一部分,因为我认为它只与静态链接有关(“-s”后缀表明...)
  • 好吧。我试过了,更新了我的链接器设置并在教程中指定的预处理器选项中定义了 SFML_STATIC 宏,但我仍然得到错误...obj\Release\main.o:main.cpp:(.text.startup+0xc5) || undefined reference to `_imp___ZN2sf6StringC1EPKcRKSt6locale'|...一堆这些
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多