提问人:elanilero 提问时间:8/7/2022 最后编辑:273Kelanilero 更新时间:11/12/2023 访问量:601
SFML 未定义对“std::basic_streambuf...”的引用
SFML undefined reference to `std::basic_streambuf...'
问:
我正在尝试编译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++ 编译器进行编译。
答:
0赞
273K
8/7/2022
#1
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赞
elanilero
8/7/2022
如果我从源代码构建它,我将能够将它与我想要的任何编译器版本一起使用?顺便说一句:我的命令也遇到了同样的错误
0赞
273K
8/7/2022
我将能够将它与我想要的任何编译器版本一起使用不可以,您将无法将其与任何编译器一起使用。您将能够使用用于 SFML 构建的编译器版本进行构建。
0赞
elanilero
8/7/2022
这就是我的意思,谢谢,我会努力的。我是现在必须接受您的回答,还是在编译 SFML 后必须等待编译成功?
0赞
273K
8/7/2022
这取决于你。答案并没有按照你想要的方式解决问题。
0赞
elanilero
8/7/2022
我尝试按照官方教程构建库,但在“构建 CXX 对象...”我得到了两个“对_setjmp的未定义引用”。
0赞
user1314464
11/12/2023
#2
我在使用 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
评论