编译器现在遵循C ++ 14标准,我的项目不再编译?神秘的SFML错误

时间:2018-10-03 12:34:26

标签: c++ codeblocks sfml

这些错误是什么意思?在一个项目上工作了2年多的时间之后,然后更改为使编译器遵循c ++ 14标准之后,我的项目现在无法编译,现在我很着急。

错误:

undefined reference to `_imp___ZN2sf7Texture12loadFromFileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4RectIiEE'|

错开了

_imp__sf::Texture::loadFromFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, sf::Rect<int> const&)

我的编译器设置

让g ++遵循C ++ 14

Linker Settings:  (the dependencies order SFML requires)  sfml-graphics  
                  sfml-window
                  sfml-system
                  sfml-audio

Compiler: C:\CodeBlocks\SFML-2.4.2\include
Linker:   C:\CodeBlocks\SFML-2.4.2\lib

2 个答案:

答案 0 :(得分:3)

尝试将-DGLIBCXX_USE_CXX11_ABI=0添加到编译器开关中(不确定如何使用CodeBlocks进行操作)。

查看详细信息herehere

答案 1 :(得分:2)

未定义的引用可能是SFML编译到您现在编译项目之间的编译器版本或配置不兼容。如果您下载了SFML的二进制版本,则应准确说明它可以使用的编译器和版本。如果您是从源代码构建的SFML,则只需使用当前的编译器配置对其进行重新构建即可解决此问题。

通常添加-std=c++14或类似的作品(在具有相同标准库的完全相同的编译器上),但是在某些情况下(例如,库使用typedef或受宏保护的函数在接口中使用较新的类型)有空的时候。而且,如果更改了编译器或库的版本,则还有更多注意事项。