c++ - SFML loadFromFile 未定义引用

标签 c++ sfml

我正在学习使用 SFML 来制作一个小游戏,到目前为止,我已经创建了一个窗口并弄乱了它的设置,并设置了一个绘制循环和事件处理程序。

当我尝试使用以下代码添加第一个纹理时,问题就开始了:

#include "SpaceNomad.ih"

void MainMenu(GameEngine &Engine)
{
    sf::Texture texture;

    if(!texture.loadFromFile("MenuBackGround.png"))
    {
        cout << "couldn't load background texture\n";
    }

    sf::Sprite *sprite = new sf::Sprite;
    sprite->setTexture(texture);

    Engine.AddEntity(sprite, 5);
}

这实际上是在不同图像之外的 SFML tutorial page 上给出的示例代码.

当我尝试编译它时,出现以下错误:

||=== Build: Debug in space nomad (compiler: GNU GCC Compiler) ===|
obj\Debug\projects\st\take2\MainMenu.o||In function     `Z8MainMenuR10GameEngine':|
D:\projects\st\take2\MainMenu.cpp|7|undefined reference to `_imp___ZN2sf7Texture12loadFromFileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4RectIiEE'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

我已经检查了所有 sfml 库是否都包含在构建选项中(我正在使用 code::Blocks 和 GCC MinGW)。

https://drive.google.com/file/d/0B4qzXcgqbLZtcHJWUy1vSUhpdVk/view?usp=sharing

我见过的其他主题涉及对人们自己创建的函数的 undefined reference ,但在这里我使用的是一个库。

编辑:我刚刚尝试使用同一库中的基本形状:

    sf::CircleShape *shape = new sf::CircleShape(50);

    // set the shape color to green
    shape->setFillColor(sf::Color(100, 250, 50));

    Engine.AddEntity(shape, 5);

编译和显示没有问题。

最佳答案

您使用的 SFML 库是使用与您链接应用程序不同的运行时或不同的运行时 ABI 编译的。

如果您的 SFML 库不是使用您拥有的同一编译器编译的,那么您需要重新构建。

如果您在应用程序上设置了任何特殊标志(例如不同的 ABI、C++14 等),则还必须使用相同的标志重建 SFML 或将其从项目中删除。

此外,它有时只会发生,因为它不会影响整个运行时库,而是影响调用 loadFromFile 函数时使用的 std::string 等部分。

关于c++ - SFML loadFromFile 未定义引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32426810/

相关文章:

c++ - 暂停功能并从机器人运动的某个点继续

c++ - 为什么流运算符在 C++ 中返回引用?

c++ - 没有管理员权限的 SFML 1.6

C++ SFML 不同类之间的碰撞检测

c++ - 如何使用逗号将一个字符串分成两个字符串,并存储字符串? (C++)

c++ - 继承:值被继承变化

c++ - delete 和 delete[] 是否等同于基本数据类型

c++ - OpenGL光照根据观察方向改变

c++ - 快速射线和多边形相交

c++ - 如何在 SFML 中检查二维 map 上的碰撞?