Не компилируется проект с SFML с ошибкой “undefined reference to sf::” используя CMake

94
22 июня 2021, 04:10

Имеется код:

#include <SFML/Graphics.hpp>
int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::CircleShape shape (100.f);
    shape.setFillColor(sf::Color::Green);
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
        window.clear();
        window.draw(shape);
        window.display();
    }
    return 0;
}

При попытке его скомпилировать вылезают ошибки:

/home/kasless/CLionProjects/Test/main.cpp:7: undefined reference to `sf::String::String(char const*, std::locale const&)'
/usr/bin/ld: /home/kasless/CLionProjects/Test/main.cpp:7: undefined reference to `sf::VideoMode::VideoMode(unsigned int, unsigned int, unsigned int)'
/usr/bin/ld: /home/kasless/CLionProjects/Test/main.cpp:7: undefined reference to `sf::RenderWindow::RenderWindow(sf::VideoMode, sf::String const&, unsigned int, sf::ContextSettings const&)'
/usr/bin/ld: /home/kasless/CLionProjects/Test/main.cpp:8: undefined reference to `sf::CircleShape::CircleShape(float, unsigned long)'
/usr/bin/ld: /home/kasless/CLionProjects/Test/main.cpp:9: undefined reference to `sf::Color::Green'
/usr/bin/ld: /home/kasless/CLionProjects/Test/main.cpp:9: undefined reference to `sf::Shape::setFillColor(sf::Color const&)'
/usr/bin/ld: /home/kasless/CLionProjects/Test/main.cpp:11: undefined reference to `sf::Window::isOpen() const'
/usr/bin/ld: /home/kasless/CLionProjects/Test/main.cpp:14: undefined reference to `sf::Window::pollEvent(sf::Event&)'
/usr/bin/ld: /home/kasless/CLionProjects/Test/main.cpp:17: undefined reference to `sf::Window::close()'
/usr/bin/ld: /home/kasless/CLionProjects/Test/main.cpp:20: undefined reference to `sf::Color::Color(unsigned char, unsigned char, unsigned char, unsigned char)'
/usr/bin/ld: /home/kasless/CLionProjects/Test/main.cpp:20: undefined reference to `sf::RenderTarget::clear(sf::Color const&)'
/usr/bin/ld: /home/kasless/CLionProjects/Test/main.cpp:21: undefined reference to `sf::RenderStates::Default'
/usr/bin/ld: /home/kasless/CLionProjects/Test/main.cpp:21: undefined reference to `sf::RenderTarget::draw(sf::Drawable const&, sf::RenderStates const&)'
/usr/bin/ld: /home/kasless/CLionProjects/Test/main.cpp:22: undefined reference to `sf::Window::display()'
/usr/bin/ld: /home/kasless/CLionProjects/Test/main.cpp:7: undefined reference to `sf::RenderWindow::~RenderWindow()'
/usr/bin/ld: /home/kasless/CLionProjects/Test/main.cpp:7: undefined reference to `sf::RenderWindow::~RenderWindow()'
/usr/bin/ld: CMakeFiles/Test.dir/main.cpp.o: in function `sf::CircleShape::~CircleShape()':
/usr/include/SFML/Graphics/CircleShape.hpp:41: undefined reference to `vtable for sf::CircleShape'
/usr/bin/ld: /usr/include/SFML/Graphics/CircleShape.hpp:41: undefined reference to `vtable for sf::CircleShape'
/usr/bin/ld: /usr/include/SFML/Graphics/CircleShape.hpp:41: undefined reference to `sf::Shape::~Shape()'
collect2: error: ld returned 1 exit status
make[3]: *** [CMakeFiles/Test.dir/build.make:84: Test] Error 1
make[2]: *** [CMakeFiles/Makefile2:73: CMakeFiles/Test.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:85: CMakeFiles/Test.dir/rule] Error 2
make: *** [Makefile:118: Test] Error 2

Файл CMakeLists.txt:

cmake_minimum_required(VERSION 3.14)
project(Test)
set(CMAKE_CXX_STANDARD 17)
add_executable(Test main.cpp)

Устанавливал библиотеку SFML из стандартного репозитория на Kubuntu этой командой:

sudo apt-get install libsfml-dev

Поискав в интернете обнаружил, что проблема в линковке, но как слинковать конкретно с SFML, я не понял. На офф. сайте SFML написано что если я установил SFML в стандартную директорию то проблем с линкерами возникнуть не должно. На линуксе недавно. Работаю в Clion. Если понадобится дополнительная инфа - пишите предаставлю всё что от меня нужно.

Answer 1

Для того, чтобы корректно слинковать библиотеки sfml с приложением, необходимо в скрипте CMakeLists.txt указать, с какими библиотеками линкуется приложение с помощью команды target_link_libraries например:

target_link_libraries(Test sfml-graphics sfml-window sfml-system)
READ ALSO
Невалидный итератор после поиска

Невалидный итератор после поиска

Мне нужен класс в котором одно из полей(контейнер) будет подгружаться по мере необходимостиНапример когда происходит вызов begin() данные подгрузятся

100
Компиляция Qt 4.8.7 приложения под Linux

Компиляция Qt 4.8.7 приложения под Linux

С Linux'ом практически никогда не работал, поэтому в этой теме абсолютный ноль, очень надеюсь на вашу помощь

73
Есть ли в Android SDK функция - аналог jQuery.param()?

Есть ли в Android SDK функция - аналог jQuery.param()?

В библиотеке jQuery есть функция param()

101