Ошибки с SFML в проекте Netbeans C ++ - PullRequest
       49

Ошибки с SFML в проекте Netbeans C ++

1 голос
/ 30 сентября 2019

Я работаю на C ++ с NetBeans (на Windows). Я пытаюсь заставить работать SMFL.

#include <iostream>
#include <cstdlib>
#include <time.h>
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>

using namespace std;

/*
 * 
 */
int main(int argc, char** argv) 
{
    RenderWindow window(VideoMode(600, 800), "TITLE");
    cout << "Hello World!";

    return 0;
}

Когда я запускаю приложение, я получаю следующие ошибки.

main.cpp:31: undefined reference to `__imp__ZN2sf6StringC1EPKcRKSt6locale'
main.cpp:31: undefined reference to `__imp__ZN2sf9VideoModeC1Ejjj'
main.cpp:31: undefined reference to `__imp__ZN2sf12RenderWindowC1ENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE'
main.cpp:31: undefined reference to `__imp__ZN2sf12RenderWindowD1Ev'
main.cpp:31: undefined reference to `__imp__ZN2sf12RenderWindowD1Ev'

Строка 31:

RenderWindow window(VideoMode(600, 800), "TITLE");

Я добавил SFML / include dir для компилятора c ++ и SFML / lib для компоновщика, можете ли вы мне помочь?

РЕДАКТИРОВАТЬ: после попытки добавить lib и включить фолды, теперь я получаю: «ошибка при загрузке общих библиотек:?: невозможно открыть общий объектный файл: нет такого файла или каталога "

1 Ответ

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

Вы должны сообщить NetBeans три вещи:

  • Каталог с включаемыми файлами SFML
  • Каталог с библиотеками SFML
  • Список библиотек SFML для ссылки

Похоже, вы уже знаете, как сделать # 1, но я повторю все на всякий случай. Все эти настройки должны быть выполнены с использованием свойств проекта - щелкните правой кнопкой мыши на имени вашего проекта, затем откройте окно настройки свойств. Вам нужно будет добавить дополнения в двух панелях - «Компилятор C ++» и «Линкер».

Панель «Компилятор C ++» - это то, что вам нужно в первую очередь. Найдите строку «Включить каталоги» и нажмите на квадрат с тремя точками (выбор каталога) - затем добавьте SFML-каталог «Включить». Эта панель в моем случае ниже:

C++ Compiler Setup Pane

Следующая панель - это панель "Linker". Найдите «Дополнительные каталоги библиотек» и добавьте SFML-каталог «lib», используя также средство выбора каталогов. Затем найдите строку «Библиотеки» и добавьте как минимум три библиотеки - «sfml-graphics», «sfml-window» и «sfml-system». Для этого вам нужно использовать немного более сложный селектор, вам нужна кнопка «Добавить библиотеку ...» - пожалуйста, смотрите третью картинку здесь. Порядок библиотек важен . Эта панель в моем случае ниже:

Linker Setup Pane

Это библиотека выбора - используйте кнопку "Добавить библиотеку ..."

Libraries Chooser

Также в вашем примере вам необходимо использовать префикс "sf ::" для типов SFML:

sf::RenderWindow window(sf::VideoMode(600, 800), "TITLE");

ADDITION . Похоже (из комментариев), что проблемы компиляции и компоновки были решены, однако приложение все еще не может найти динамические библиотеки SFML. Эта проблема находится за пределами NetBeans - вам просто нужно убедиться, что каталог SFML с динамическими библиотеками был добавлен в системный путь Windows.

Это имя каталога может быть длинным, поэтому его легко ввести неправильно, когдадобавляя к пути. Есть простой способ убедиться в этом - инструмент Windows where.exe. Некоторые системы Windows не имеют этого инструмента - поэтому вы можете вывести текущий путь с помощью команды path, а затем скопировать и вставить часть пути, связанную с SFML, в качестве аргумента команды Unix ls (он находится всреда MinGW MSYS). Обычно ls показывает список динамических библиотек SFML (с расширением dll).

...