【发布时间】: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