其他分享
首页 > 其他分享> > c-SFML loadFromFile未定义引用

c-SFML loadFromFile未定义引用

作者:互联网

我正在学习将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库都包含在构建选项中(我在GCC MinGW中使用code :: Blocks).

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函数时会使用.

标签:sfml,c
来源: https://codeday.me/bug/20191011/1896592.html