为什么 SFML 2.6 会出现未定义的引用错误,而 SFML 2.5.1 却没有?

Why SFML 2.6 is making undefined reference errors but SFML 2.5.1 is not?

提问人:El-Zack0 提问时间:10/17/2023 更新时间:10/17/2023 访问量:35

问:

我试图在代码块上配置 SFML 2.6 以进行游戏开发,但它在构建项目时给了我很多错误,绝大多数错误都是未定义的引用(类似于“对'__imp__ZN2sf6StringC1EPKcRKSt6locale'的未定义引用”)。

我在互联网上尝试了很多不同的解决方案和不同的IDE,但没有一个适合我。 但是当我尝试使用旧版本SFML 2.5.1时,问题就解决了,并且一切都运行良好(它也适用于SFML 2.3)。

问题是由于设置或链接错误造成的吗?还是库有一些错误?

这是我使用的代码:

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.draw(shape);
        window.display();
    }

    return 0;
}

这是编译命令:

{
    "cmd": ["g++", "-std=c++17", 
            "-I", "C:\\SFML\\include",
            "-L", "C:\\SFML\\lib", 
            "-o", "$file_base_name", "$file", "-lsfml-graphics", "-lsfml-window", "-lsfml-system"],
    "selector": "source.cpp",
    "working_dir": "$file_path",
    "shell": true
}

它们都用于旧版本和新版本的SFML。

C++ 代码块 游戏开发 SFML

评论

0赞 pptaszni 10/17/2023
不是很有帮助,但您的示例缺少符号很可能是关于这个 github.com/SFML/SFML/blob/master/src/SFML/System/String.cpp#L70。也许您有一些冲突的标头和编译库版本?也许您只是以某种方式损坏了标头,现在它们不匹配。或者您下载了错误版本的库,并且 g++ 无法与之链接。
0赞 pptaszni 10/17/2023
无论如何,您可以尝试将 github 中的 SFML 源代码嵌入到您的项目中,看看它会起作用 - 它应该。
0赞 drescherjm 10/17/2023
也许您的 sfml 二进制文件与 MinGW 不兼容或与您的 MinGW 版本不兼容。我建议您使用 MinGW 通过 msys2 安装它,并使用内置的包管理安装所有依赖的开源库。这样你就有了当前的MinGW和有保证的兼容库。pacman

答: 暂无答案