SFML 2.5.1 и CodeBlocks с GCC 5.1.0 - ошибки компиляции проекта - PullRequest
0 голосов
/ 06 октября 2019

Я загрузил пакет SFML 2.5.1 для CodeBlocks (GCC 5.1.0 TDM (SJLJ)), и даже после следования руководству по SFML я все еще не могу запустить свое приложение в этой IDE. Я пробовал несколько способов, но мне не удалось. Может кто-нибудь дать мне несколько советов о проблеме, сделав выводы из журналов ошибок? Благодарю. Мой компилятор - GCC 5.1.0, и мой код является примером сайта SFML . Построен:

1 Динамическими библиотеками из пакета SFML. Проект создается без ошибок, но когда я запускаю программу, я получаю следующее сообщение:

Не удается найти точку входа в процедуру _ZNKSt7_cxx1112basic_stringlcSt11char_traitslcESalcEE12find_last_ofEPKcj в DLL-файле [путь к проекту] sfml-system-d-2. dll

(эта ошибка возникает для всех библиотек - системы, графики и окна).

2 Статические библиотеки из пакета SFML:

||=== Build: Release in SFML example (compiler: GNU GCC Compiler) ===|
C:\Users\user\Desktop\SFML-2.5.1\lib\libsfml-graphics-s.a(Shader.cpp.obj):Shader.cpp|| undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned int&, unsigned int)'|
C:\Users\user\Desktop\SFML-2.5.1\lib\libsfml-graphics-s.a(Shader.cpp.obj):Shader.cpp|| undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned int&, unsigned int)'|
C:\Users\user\Desktop\SFML-2.5.1\lib\libsfml-graphics-s.a(Shader.cpp.obj):Shader.cpp|| undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned int&, unsigned int)'|
||error: ld returned 1 exit status|
||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

Последля этого я решил собрать SFML с CMake и make-файлом CodeBlock.

3 Встроенные статические библиотеки («include» происходит из пакета SFML, а также openal32 и dll freetype):

||=== Build: Release in SFML example (compiler: GNU GCC Compiler) ===|
obj\Release\main.o:main.cpp:(.text.startup+0xc4)||undefined reference to `sf::String::String(char const*, std::locale const&)'|
obj\Release\main.o:main.cpp:(.text.startup+0xf3)||undefined reference to `sf::VideoMode::VideoMode(unsigned int, unsigned int, unsigned int)'|
obj\Release\main.o:main.cpp:(.text.startup+0xea)||undefined reference to `sf::RenderWindow::RenderWindow(sf::VideoMode, sf::String const&, unsigned int, sf::ContextSettings const&)'|
obj\Release\main.o:main.cpp:(.text.startup+0x12a)||undefined reference to `sf::CircleShape::CircleShape(float, unsigned int)'|
obj\Release\main.o:main.cpp:(.text.startup+0x13a)||undefined reference to `sf::Color::Green'|
obj\Release\main.o:main.cpp:(.text.startup+0x149)||undefined reference to `sf::Shape::setFillColor(sf::Color const&)'|
obj\Release\main.o:main.cpp:(.text.startup+0x161)||undefined reference to `sf::Window::isOpen() const'|
obj\Release\main.o:main.cpp:(.text.startup+0x198)||undefined reference to `sf::Window::pollEvent(sf::Event&)'|
obj\Release\main.o:main.cpp:(.text.startup+0x1c9)||undefined reference to `sf::Color::Color(unsigned char, unsigned char, unsigned char, unsigned char)'|
obj\Release\main.o:main.cpp:(.text.startup+0x1e0)||undefined reference to `sf::RenderTarget::clear(sf::Color const&)'|
obj\Release\main.o:main.cpp:(.text.startup+0x1f7)||undefined reference to `sf::RenderStates::Default'|
obj\Release\main.o:main.cpp:(.text.startup+0x1ff)||undefined reference to `sf::RenderTarget::draw(sf::Drawable const&, sf::RenderStates const&)'|
obj\Release\main.o:main.cpp:(.text.startup+0x20d)||undefined reference to `sf::Window::display()'|
obj\Release\main.o:main.cpp:(.text.startup+0x231)||undefined reference to `sf::Window::close()'|
obj\Release\main.o:main.cpp:(.text.startup+0x246)||undefined reference to `vtable for sf::CircleShape'|
obj\Release\main.o:main.cpp:(.text.startup+0x250)||undefined reference to `vtable for sf::CircleShape'|
obj\Release\main.o:main.cpp:(.text.startup+0x255)||undefined reference to `sf::Shape::~Shape()'|
obj\Release\main.o:main.cpp:(.text.startup+0x260)||undefined reference to `sf::RenderWindow::~RenderWindow()'|
obj\Release\main.o:main.cpp:(.text.startup+0x2e3)||undefined reference to `vtable for sf::CircleShape'|
obj\Release\main.o:main.cpp:(.text.startup+0x2ed)||undefined reference to `vtable for sf::CircleShape'|
obj\Release\main.o:main.cpp:(.text.startup+0x2f2)||undefined reference to `sf::Shape::~Shape()'|
obj\Release\main.o:main.cpp:(.text.startup+0x2fd)||undefined reference to `sf::RenderWindow::~RenderWindow()'|
||error: ld returned 1 exit status|
||=== Build failed: 23 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

4 Встроенные динамические библиотеки («include» поставляется из пакета):

||=== Build: Release in SFML example (compiler: GNU GCC Compiler) ===|
obj\Release\main.o:main.cpp:(.text.startup+0xc5)||undefined reference to `_imp___ZN2sf6StringC1EPKcRKSt6locale'|
obj\Release\main.o:main.cpp:(.text.startup+0xf5)||undefined reference to `_imp___ZN2sf9VideoModeC1Ejjj'|
obj\Release\main.o:main.cpp:(.text.startup+0xed)||undefined reference to `_imp___ZN2sf12RenderWindowC1ENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE'|
obj\Release\main.o:main.cpp:(.text.startup+0x12e)||undefined reference to `_imp___ZN2sf11CircleShapeC1Efj'|
obj\Release\main.o:main.cpp:(.text.startup+0x133)||undefined reference to `_imp___ZN2sf5Color5GreenE'|
obj\Release\main.o:main.cpp:(.text.startup+0x14f)||undefined reference to `_imp___ZN2sf5Shape12setFillColorERKNS_5ColorE'|
obj\Release\main.o:main.cpp:(.text.startup+0x172)||undefined reference to `_imp___ZNK2sf6Window6isOpenEv'|
obj\Release\main.o:main.cpp:(.text.startup+0x1a9)||undefined reference to `_imp___ZN2sf6Window9pollEventERNS_5EventE'|
obj\Release\main.o:main.cpp:(.text.startup+0x1db)||undefined reference to `_imp___ZN2sf5ColorC1Ehhhh'|
obj\Release\main.o:main.cpp:(.text.startup+0x1f3)||undefined reference to `_imp___ZN2sf12RenderTarget5clearERKNS_5ColorE'|
obj\Release\main.o:main.cpp:(.text.startup+0x1f8)||undefined reference to `_imp___ZN2sf12RenderStates7DefaultE'|
obj\Release\main.o:main.cpp:(.text.startup+0x214)||undefined reference to `_imp___ZN2sf12RenderTarget4drawERKNS_8DrawableERKNS_12RenderStatesE'|
obj\Release\main.o:main.cpp:(.text.startup+0x223)||undefined reference to `_imp___ZN2sf6Window7displayEv'|
obj\Release\main.o:main.cpp:(.text.startup+0x242)||undefined reference to `_imp___ZN2sf6Window5closeEv'|
obj\Release\main.o:main.cpp:(.text.startup+0x24c)||undefined reference to `_imp___ZTVN2sf11CircleShapeE'|
obj\Release\main.o:main.cpp:(.text.startup+0x26a)||undefined reference to `_imp___ZN2sf5ShapeD2Ev'|
obj\Release\main.o:main.cpp:(.text.startup+0x276)||undefined reference to `_imp___ZN2sf12RenderWindowD1Ev'|
obj\Release\main.o:main.cpp:(.text.startup+0x2ee)||undefined reference to `_imp___ZTVN2sf11CircleShapeE'|
obj\Release\main.o:main.cpp:(.text.startup+0x30c)||undefined reference to `_imp___ZN2sf5ShapeD2Ev'|
obj\Release\main.o:main.cpp:(.text.startup+0x318)||undefined reference to `_imp___ZN2sf12RenderWindowD1Ev'|
||error: ld returned 1 exit status|
||=== Build failed: 21 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

5 Единственный раз, когда я успешно запустил код sfml (но за пределами кодовых блоков), был, когда я следовал инструкциям этого видео . Поэтому я попытался построить библиотеки SFML следующим образом: BUILD_SHARED_LIBS = false и SMFL_USE_STATIC_STD_LIBS = true.

||=== Build: Release in SFML example (compiler: GNU GCC Compiler) ===|
obj\Release\main.o:main.cpp:(.text.startup+0xc4)||undefined reference to `sf::String::String(char const*, std::locale const&)'|
obj\Release\main.o:main.cpp:(.text.startup+0xf3)||undefined reference to `sf::VideoMode::VideoMode(unsigned int, unsigned int, unsigned int)'|
obj\Release\main.o:main.cpp:(.text.startup+0xea)||undefined reference to `sf::RenderWindow::RenderWindow(sf::VideoMode, sf::String const&, unsigned int, sf::ContextSettings const&)'|
obj\Release\main.o:main.cpp:(.text.startup+0x12a)||undefined reference to `sf::CircleShape::CircleShape(float, unsigned int)'|
obj\Release\main.o:main.cpp:(.text.startup+0x13a)||undefined reference to `sf::Color::Green'|
obj\Release\main.o:main.cpp:(.text.startup+0x149)||undefined reference to `sf::Shape::setFillColor(sf::Color const&)'|
obj\Release\main.o:main.cpp:(.text.startup+0x161)||undefined reference to `sf::Window::isOpen() const'|
obj\Release\main.o:main.cpp:(.text.startup+0x198)||undefined reference to `sf::Window::pollEvent(sf::Event&)'|
obj\Release\main.o:main.cpp:(.text.startup+0x1c9)||undefined reference to `sf::Color::Color(unsigned char, unsigned char, unsigned char, unsigned char)'|
obj\Release\main.o:main.cpp:(.text.startup+0x1e0)||undefined reference to `sf::RenderTarget::clear(sf::Color const&)'|
obj\Release\main.o:main.cpp:(.text.startup+0x1f7)||undefined reference to `sf::RenderStates::Default'|
obj\Release\main.o:main.cpp:(.text.startup+0x1ff)||undefined reference to `sf::RenderTarget::draw(sf::Drawable const&, sf::RenderStates const&)'|
obj\Release\main.o:main.cpp:(.text.startup+0x20d)||undefined reference to `sf::Window::display()'|
obj\Release\main.o:main.cpp:(.text.startup+0x231)||undefined reference to `sf::Window::close()'|
obj\Release\main.o:main.cpp:(.text.startup+0x246)||undefined reference to `vtable for sf::CircleShape'|
obj\Release\main.o:main.cpp:(.text.startup+0x250)||undefined reference to `vtable for sf::CircleShape'|
obj\Release\main.o:main.cpp:(.text.startup+0x255)||undefined reference to `sf::Shape::~Shape()'|
obj\Release\main.o:main.cpp:(.text.startup+0x260)||undefined reference to `sf::RenderWindow::~RenderWindow()'|
obj\Release\main.o:main.cpp:(.text.startup+0x2e3)||undefined reference to `vtable for sf::CircleShape'|
obj\Release\main.o:main.cpp:(.text.startup+0x2ed)||undefined reference to `vtable for sf::CircleShape'|
obj\Release\main.o:main.cpp:(.text.startup+0x2f2)||undefined reference to `sf::Shape::~Shape()'|
obj\Release\main.o:main.cpp:(.text.startup+0x2fd)||undefined reference to `sf::RenderWindow::~RenderWindow()'|
||error: ld returned 1 exit status|
||=== Build failed: 23 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

1 Ответ

0 голосов
/ 14 октября 2019

Первоначальная ошибка, скорее всего, происходит из-за разницы в стандартном флаге C ++ для предварительно скомпилированных двоичных файлов (вероятно, нет -std=c++11) и настроек вашего проекта.

Для успешного связывания с SFML я рекомендую:

  • Убедитесь, что вы следуете пошаговому официальному учебнику, ничего не пропуская.
  • Если вы статически ссылаетесь:
    • Не забудьте определить SFML_STATIC в проектеsettings
    • Не забудьте связать все зависимости
  • Порядок связывания имеет значение, используйте эмпирическое правило"X зависит от Y, поэтомуX предшествует Y "
  • И всегда используйте ту же версию компилятора для компиляции SFML и для создания приложения
...