Netbeans не может загрузить общие библиотеки при использовании сторонней библиотеки: SFML - PullRequest
0 голосов
/ 15 ноября 2018

Я знаю, что подобные вопросы существуют, я их видел, и мне не повезло с ними в мои часы устранения неполадок, прежде чем я решил, что должен спросить.

Я новичок в C ++, изучаю его через класс. Мое задание требует от меня использования сторонней библиотеки: SFML . Моя текущая настройка кодирования использует Netbeans с плагином C ++, Windows 10. Ранее я использовал компилятор Cygwin. SFML утверждает, что требует, чтобы он использовался с точной версией одного из компиляторов, с которыми он был скомпилирован, поэтому я выбрал MinGW 7.3.0, который с тех пор установил, и продолжил свои попытки.

В "Project" -> Properties -> Build -> C ++ Compiler я добавил каталог включений SFML:

"C: / Пользователи / Drayux / Документы / Кодирование / NetBeans / Сторонние библиотеки / SFML-2.5.1 / include"

Здесь, в -> Определения препроцессора я также добавил:

SFML_STATIC

Как предполагает учебник здесь .

В "Project" -> Properties -> Build -> Linker я добавил каталоги lib и bin SFML:

"C: / Пользователи / Drayux / Документы / Кодирование / NetBeans / Сторонние библиотеки / SFML-2.5.1 / bin"

"C: / Пользователи / Drayux / Документы / Кодирование / NetBeans / Сторонние библиотеки / SFML-2.5.1 / lib"

Наконец, я позаботился о том, чтобы вручную добавить каждую библиотеку по отдельности в разделе «Библиотеки» раздела «Линкер». Также как предложено в приведенном выше руководстве.

После всего этого я могу написать стандартную программу, которая компилируется и запускается. Однако, как только я начинаю включать заголовки библиотеки SFML, иногда код создается, но не запускается, а иногда просто не собирается все вместе.

Возьмите этот пример кода:

#include <iostream>
using namespace std;

#include <SFML/Graphics.hpp>
using namespace sf;

int main() {
    cout << "Test output line" << endl;

    RenderWindow window(VideoMode(200, 200), "Hello there!");
    //CircleShape shape(100.f);

    return 0;
}

Когда я пытаюсь собрать его в конфигурации, описанной выше, сборка завершается успешно, но запуск не выполняется. Вот обе консоли.

Сложение:

cd 'C:\Users\Drayux\Documents\Coding\NetBeans\Lab7C'
C:\Program Files\MinGW\MSYS\bin\make.exe -f Makefile CONF=Debug
"/C/Program Files/MinGW/MSYS/bin/make.exe" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make.exe[1]: Entering directory `/c/Users/Drayux/Documents/Coding/NetBeans/Lab7C'
"/C/Program Files/MinGW/MSYS/bin/make.exe"  -f nbproject/Makefile-Debug.mk dist/Debug/MinGW-Windows/lab7c.exe
make.exe[2]: Entering directory `/c/Users/Drayux/Documents/Coding/NetBeans/Lab7C'
make.exe[2]: `dist/Debug/MinGW-Windows/lab7c.exe' is up to date.
make.exe[2]: Leaving directory `/c/Users/Drayux/Documents/Coding/NetBeans/Lab7C'
make.exe[1]: Leaving directory `/c/Users/Drayux/Documents/Coding/NetBeans/Lab7C'

BUILD SUCCESSFUL (total time: 3s)

Пробег:

C:/Users/Drayux/Documents/Coding/NetBeans/Lab7C/dist/Debug/MinGW-Windows/lab7c.exe: error while loading shared libraries: sfml_window-d-2.dll: cannot open shared object file: No such file or directory

RUN FAILED (exit value 127, total time: 74ms)

Я пробовал решение, добавив LD_LIBRARY_PATH в раздел среды в разделе Выполнить в свойствах проекта, но безуспешно.

Не видя других решений, касающихся моей ситуации, я чувствую себя застрявшим. Любая помощь с благодарностью.

Спасибо, Лиам

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

После многих часов и еще большего количества непристойностей я смог успешно запустить основную программу SFML и отобразить окно основного теста.

Я знаю, что мне еще многое предстоит узнать, но исправлением моего решения стало расположение моих общих библиотек (файлов .dll.)

Я предполагал, что ссылка на них в конфигурации компоновщика сработает, но кажется, что библиотеки .a искали их в локальном каталоге скомпилированной программы. На данный момент я все еще не знаю, как это изменить.

Таким образом, решение было вручную перемещать файлы DLL в файловой системе в каталог скомпилированной программы, в моем случае:

C: \ Users \ Drayux \ Documents \ Coding \ NetBeans \ SFML Test \ dist \ Debug \ MinGW-Windows

Надеюсь, что это поможет кому-нибудь с моей проблемой в будущем!

0 голосов
/ 15 ноября 2018

Вы, вероятно, должны передать -static параметрам компоновщика, чтобы предотвратить связывание динамической версии этой библиотеки или когда "Я позаботился о том, чтобы вручную добавить каждую из библиотек по отдельности в разделе" Библиотеки "раздела" Линкер "" Вы также случайно добавили динамическую версию библиотеки вместо того, чтобы добавлять только статическую версию.

...