Linux SFML - не удается открыть файл общего объекта
Использование Linux Mint 18 Cinnamon 64-Bit
У меня проблемы с тем, чтобы заставить SFML работать. Я пытаюсь скомпилировать из командной строки с g++.
Мой файл /home/joe/Desktop/SFML/test/main.cpp
Моя папка SFML находится на /usr/lib/SFML-2.4.1
Если я бегу g++ -c main.cpp -I/usr/lib/SFML-2.4.1/include
он компилируется нормально. Тогда я бегу g++ main.o -o sfml-app -L/usr/lib/SFML-2.4.1/lib -lsfml-graphics -lsfml-system -lsfml-window -lsfml-audio
До этого были проблемы, но после использования команды -L теперь все работает нормально.
когда я бегу ./sfml-app
Я получаю ошибку ./sfml-app: error while loading shared libraries: libsfml-graphics.so.2.4: cannot open shared object file: No such file or directory
Сейчас в /usr/lib/SFML-2.4.1/lib
Каталог libsfml-graphics.so.2.4 является символической ссылкой со следующей цепочкой (все файлы в этом каталоге.
libsfml-graphics.so -> libsfml-graphics.so.2.4 -> libsfml-graphics.so.2.4.1
Так может кто-нибудь объяснить мне, почему объектный файл не может быть найден? Спасибо
1 ответ
Проблема, с которой вы сталкиваетесь, заключается в том, что вы сообщаете компоновщику, где искать библиотечные файлы / информацию, но при запуске программы ваша система не будет знать, где найти разделяемые библиотеки, принадлежащие SFML.
Самое быстрое решение - создать небольшой скрипт для запуска вашей программы, который устанавливает переменную среды LD_LIBRARY_PATH
,
Примерно так должно работать (не проверено):
#!/usr/bin/bash
LD_LIBRARY_PATH=/usr/lib/SFML-2.4.1/bin ./sfml-app
В качестве альтернативы, я бы порекомендовал вам скомпилировать и установить SFML из исходников. Это не так сложно. Самое сложное - это определить все зависимости и сначала установить их (желательно с помощью вашего менеджера пакетов).
Также возможно установить SFML используя apt-get
, но я не уверен на 100%, что их версия актуальна: sudo apt-get install libsfml-dev