SFML 对 `std::basic_streambuf...' 的未定义引用

问题描述 投票:0回答:2

我正在尝试编译 SFML 示例程序:

#define SFML_STATIC 

#include <iostream>
#include <SFML-2.5.1\\include\\SFML\\Window.hpp>

using namespace std;

namespace SF = sf;

int main()
{
    SF::Window window {SF::VideoMode{600, 600}, "Test1"};

    while(window.isOpen())
    {
        SF::Event event;

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

    }

    return 0;
}

首先,我用

进行编译
g++ -c main.cpp -IH:\CPPLIBS\SFML-2.5.1\include -DSFML_STATIC

然后我链接到

g++ main.o -o main -LH:\CPPLIBS\SFML-2.5.1\lib -lsfml-graphics-s -lsfml-window-s -lsfml-system-s -lopengl32 -lwinmm -lgdi32

但是在链接阶段,我收到错误

H:\CPPLIBS\SFML-2.5.1\lib/libsfml-system-s.a(Err.cpp.obj):Err.cpp:(.rdata+0x80):
undefined reference to `std::basic_streambuf<char, std::char_traits<char>>::seekpos(std::fpos<int>, std::_Ios_Openmode)'

我在网上几乎到处搜索解决方案,并尝试自己修复它,更改库顺序,使用单个命令编译和链接并更改参数,但我真的无法修复它,而且似乎没有人遇到过这个确切的问题。 如您所见,我使用 WinLibs Mingw 附带的 g++ 编译器进行编译。

c++ g++ mingw linker-errors sfml
2个回答
0
投票

GCC 12 中默认的 C++ 方言是

-std=gnu++17
。尝试命令

g++ -std=gnu++11 -c main.cpp -IH:\CPPLIBS\SFML-2.5.1\include -DSFML_STATIC

g++ -std=gnu++11 main.o -o main -LH:\CPPLIBS\SFML-2.5.1\lib -lsfml-graphics-s -lsfml-window-s -lsfml-system-s -lopengl32 -lwinmm -lgdi32

如果没有帮助,请参阅我对该问题的评论。您可能需要从源代码构建 SFML。

如果您觉得您的 GCC 版本无法使用预编译的 SFML 库,请不要犹豫自己构建 SFML,这并不复杂。


0
投票

我在 Windows 上使用 Clang + SFML 时遇到了同样的问题。解决方案只是重建静态 SFML 库:

Cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DSFML_USE_STATIC_STD_LIBS=ON -DBUILD_SHARED_LIBS=OFF -B build -G "Ninja"

ninja -C build

© www.soinside.com 2019 - 2024. All rights reserved.