Не удается найти библиотеку openni2 после успешной компиляции

#c #linux #opencv #openni

#c #linux #opencv #openni

Вопрос:

Я пытаюсь просмотреть рамки цвета и глубины openni с помощью opencv, и я смог скомпилировать код с:

 g   `pkg-config opencv --cflags` -I /home/myaccount/Downloads/OpenNI/Include/ testing.cpp -o newtest -L /home/myaccount/Downloads/OpenNI/Redist/ -lOpenNI2 `pkg-config opencv --libs`
  

Но когда я запускаю ./newtest, я получаю следующую ошибку:

 ./newtest: error while loading shared libraries: libOpenNI2.so: cannot open shared object file: No such file or directory
  

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

Спасибо

Комментарии:

1. Запустите ldd newtest , чтобы узнать, где он ожидает найти libOpenNI2.so . Возможно, вам потребуется иметь библиотеку в рабочем каталоге.

2. @piedar — он показывает только libOpenNI2.so => не найдено для openni, а большинство других библиотек находятся в /lib и /usr/lib. Вы хотите увидеть полный результат?

3. Что произойдет, если вы переместите newtest в /home/myaccount/Downloads/OpenNI/ ?

4. @piedar — Я получаю ту же ошибку при перемещении файла в каталог OpenNI.

5. Извините, попробуйте /home/myaccount/Downloads/OpenNI/Redist/ . Если это не сработает, возможно, вам придется провести некоторое исследование rpath . К сожалению, я не понимаю этого достаточно хорошо, чтобы объяснить.

Ответ №1:

У меня была аналогичная проблема, и это решило ее, как указано ниже. Вы не сказали, какой дистрибутив, но если на Ubuntu вам нужно будет добавить свое местоположение «Redist» разделяемой библиотеки в компоновщик conf. Итак, создайте новый файл:

 $ sudo gedit /etc/ld.so.conf.d/openni2.conf

/<your-custom-shared-lib-location>/Redist/
  

Обратите внимание, что вам нужно только добавить path, а не переменную PATH в файл. Затем запустите

 sudo ldconfig
  

Символ -L в makefile относится к связыванию ваших общих библиотек во время компиляции. Для связывания во время выполнения вам нужно вышеупомянутое. Насколько я понимаю, это необходимо только в том случае, если ваши библиотеки не находятся в расположении по умолчанию / usr/local/lib. Это подскажет компоновщику включить эти пути для ваших общих библиотек во время выполнения.

Ответ №2:

Я столкнулся с аналогичной проблемой и скопировал этот файл в каталог ссылок моей программы, который я установил ранее. как ${PROJECT_SOURCE_DIR}/lib будто тогда это работает.

Сначала попытайтесь libOpenNI2.so определить, где находится. locate libOpenNI2.so затем или скопируйте этот файл в каталог ссылок на мои программы. И я думаю, скопируйте этот файл в системный каталог ссылок, например usr / lib, он также работает.