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

j2qf4p5b  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(108)

我正在尝试编译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++编译器。

yshpjwxd

yshpjwxd1#

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

字符串
如果没有帮助,请参阅我对这个问题的评论。
如果你觉得你的GCC版本不能与预编译的SFML库一起工作,不要犹豫,build SFML yourself,它并不复杂。

x6492ojm

x6492ojm2#

我在使用Clang + SFML for Windows时遇到了同样的问题。解决方案是使用以下命令重建静态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

字符串

相关问题