Исполняемый файл C ++ не может найти библиотеку во время выполнения, даже если он находится в / usr / lib (в Linux) - PullRequest
0 голосов
/ 29 сентября 2019

Я создаю игру на C ++ с платформой Panda3D на Ubuntu.Все общие библиотеки Panda3D находятся в /usr/lib/panda3d, а все заголовки - в /usr/include/panda3d.Я компилирую с SCons, но я попробовал это с gcc, и это то же самое, поэтому вот команды:

g++ -o src/main.o -c -fPIC -O2 -std=gnu++11 -I/usr/include/python2.7 -I/usr/include/panda3d -Iinclude src/main.cpp

g++ -o Test src/main.o -L/usr/lib/panda3d -lp3framework -lpanda -lpandafx -lpandaexpress -lpandabullet -lp3dtoolconfig -lp3dtool -lp3direct -lpthread

И вот ошибка, которую я получаю, когда запускаю исполняемый файл:

./Test: error while loading shared libraries: libp3framework.so.1.11: cannot open shared object file: No such file or directory

В коде немногое, просто инициализация окна Panda3D, поэтому я сомневаюсь, что это виновник.

Как я уже говорил, библиотеки находятся в /usr/lib/panda3d, я проверял около миллиона раз, и это сводит меня с ума.Я не могу придумать ни одной причины, по которой я получил бы эту ошибку.Любая помощь приветствуется:)

Редактировать:

Я просматривал свои файлы, и в /etc/ld.so.conf.d есть файл panda3d.conf с одной строкой: /usr/local/lib/x86_64-linux-gnu/panda3d.Это как-то связано с этим?

Edit # 2:

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

1 Ответ

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

Я не могу придумать ни одной причины, по которой я получил бы эту ошибку.

Причина очень проста: динамическому загрузчику не велено искать в /usr/lib/panda3d общих библиотек, и это не так.

Вы можете запустить вашу программус помощью:

LD_DEBUG=files,libs ./Test

и просмотрите, какие каталоги ищет загрузчик.

panda3d.conf ... одной строкой: /usr/local/lib/x86_64-linux-gnu/panda3d

Это неправильный каталог (или, по крайней мере, не тот, в котором находятся ваши библиотеки).

Один из способов исправить это - исправить указанный выше путь к /usr/lib/panda3d и запустить sudo ldconfig.

Другой способ - добавить -Wl,-rpath=/usr/lib/panda3d к вашей ссылке.

...