#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, он также работает.