SFML loadFromFile未定义引用

SFML loadFromFile undefined reference

本文关键字:引用 未定义 loadFromFile SFML      更新时间:2023-10-16

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

问题开始了,一旦我试图添加我的第一个纹理使用以下代码:

#include "SpaceNomad.ih"
void MainMenu(GameEngine &Engine)
{
    sf::Texture texture;
    if(!texture.loadFromFile("MenuBackGround.png"))
    {
        cout << "couldn't load background texturen";
    }
    sf::Sprite *sprite = new sf::Sprite;
    sprite->setTexture(texture);
    Engine.AddEntity(sprite, 5);
}

在不同的图像之外,字面上是SFML教程页面上给出的示例代码。

当我尝试编译这个时,我得到以下错误:

||=== Build: Debug in space nomad (compiler: GNU GCC Compiler) ===|
objDebugprojectssttake2MainMenu.o||In function     `Z8MainMenuR10GameEngine':|
D:projectssttake2MainMenu.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 with GCC MinGW)。

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

我见过的其他主题处理人们自己创建的函数的未定义引用,但这里我使用的是一个库。

编辑:我刚刚尝试了基本的形状从相同的库:

    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,或者从你的项目中删除它们。

它也只是偶尔发生,因为它不影响整个运行时库,但std::string等部分在调用loadFromFile函数时使用。