Почему возникает проблема с линковкой SFML к проекту?

Как правильно прилинковать статическую библиотеку SFML, собранную из исходных кодов с использованием компилятора MSVC, к проекту?
Изображение к вопросу
  • 13 сентября 2023 г. 15:17
Ответы на вопрос 2
Проблемы с линковкой SFML к проекту могут возникать по нескольким причинам:

1. Неправильно указаны пути к заголовочным файлам и библиотекам SFML. Убедитесь, что вы правильно указали эти пути в настройках компилятора.

2. Версии SFML и компилятора несовместимы. Убедитесь, что используемая вами версия SFML собрана с тем же компилятором, что и ваш проект.

3. Проблемы с файлами библиотеки. Убедитесь, что файлы библиотеки SFML доступны вашему проекту, и они соответствуют используемой версии SFML.

Чтобы правильно прилинковать статическую библиотеку SFML к проекту, выполните следующие шаги:

1. Скомпилируйте исходники SFML с помощью компилятора MSVC, чтобы получить статические библиотеки (.lib файлы).

2. В настройках вашего проекта в Visual Studio добавьте пути к заголовочным файлам SFML. Это можно сделать в свойствах проекта (Project Properties) -> Configuration Properties -> C/C++ -> General -> Additional Include Directories. Укажите путь к папке "include" в каталоге, где вы распаковали исходники SFML.

3. В настройках вашего проекта также добавьте пути к статическим библиотекам SFML. Это можно сделать в свойствах проекта (Project Properties) -> Configuration Properties -> Linker -> General -> Additional Library Directories. Укажите путь к каталогу, где находятся .lib файлы SFML.

4. Далее, также в настройках проекта в разделе Linker -> Input -> Additional Dependencies указывается список .lib файлов, которые необходимо прилинковать. Добавьте все необходимые lib файлы SFML в список.

5. После этого, компилятор должен успешно находить заголовочные файлы и библиотеки SFML, и линковка должна проходить без ошибок.
Собрал SFML из исходников... Возникает следующая ошибка при компиляции: error LNK2019: неразрешенный внешний символ "__declspec(dllimport) public: __cdecl sf::VideoMode::VideoMode(unsigned int,unsigned int,unsigned int)" (__imp_??0VideoMode@sf@@QEAA@III@Z), на который ссылается main.cpp.obj в функции main.
Та же ошибка возникает для других символов:

- "__declspec(dllimport) public: bool __cdecl sf::WindowBase::isOpen(void)const " (__imp_?isOpen@WindowBase@sf@@QEBA_NXZ) - проверяет, открыто ли окно;
- "__declspec(dllimport) public: bool __cdecl sf::WindowBase::pollEvent(class sf::Event &)" (__imp_?pollEvent@WindowBase@sf@@QEAA_NAEAVEvent@2@@Z) - опрашивает события окна;
- "__declspec(dllimport) public: __cdecl sf::Window::Window(class sf::VideoMode,class sf::String const &,unsigned int,struct sf::ContextSettings const &)" (__imp_??0Window@sf@@QEAA@VVideoMode@1@AEBVString@1@IAEBUContextSettings@1@@Z) - создает окно;
- "__declspec(dllimport) public: virtual __cdecl sf::Window::~Window(void)" (__imp_??1Window@sf@@UEAA@XZ) - деструктор окна;
- "__declspec(dllimport) public: virtual void __cdecl sf::Window::close(void)" (__imp_?close@Window@sf@@UEAAXXZ) - закрывает окно.

Данные символы определены в библиотеке sfml-window, которой у вас, вероятно, нет.
Похожие вопросы