Ошибка при запуске класса OpenNI 2 (gcc 4.7.2 / ubuntu 12.10)

Я пытаюсь скомпилировать запуск очень простой программы, приведенной ниже (test.cpp), которая вызывает класс OpenNI. Вы можете увидеть файлы и папки, в которых они находятся. Извините, что некоторые символы немного портятся в кодировке браузера. Я использую команду linux: tree, если вы знаете лучшую команду, скажите мне, и я обновлю ее.

Файловая структура

Я следую за гидом Вот, см. «GCC / GNU Make».

#include < stdio.h >
#include < OpenNI.h >

using namespace openni;

int
main ( void )
{
Status rc = OpenNI::initialize();

if (rc != STATUS_OK)
{
printf("\nInitialize failed\n%s\n", OpenNI::getExtendedError());
return 1;
}

printf("Hello, world!\n");
return 0;
}

Вот что я запускаю в командной строке для его компиляции (gcc 4.7.2):

gcc test.cpp -I../OpenNI-2.0.0/Include -L/home/evan/Code/OpenNi/Init -l OpenNI2 -o test

Это работает нормально, но когда я запускаю ./test, я получаю следующую ошибку:

Initialize failed
DeviceDriver: library handle is invalid for file libOniFile.so
Couldn't understand file 'libOniFile.so' as a device driver
DeviceDriver: library handle is invalid for file libPS1080.so
Couldn't understand file 'libPS1080.so' as a device driver
Found no valid drivers in './OpenNI2/Drivers'

Спасибо, любая помощь будет высоко ценится.

1

Решение

Инструкция от вашего гида говорит, что

Настоятельно рекомендуется также добавить «-Wl, -rpath ./» к вашей команде связи. В противном случае компоновщик времени выполнения не найдет файл libOpenNI.so при запуске приложения. (поведение Linux по умолчанию — искать общие объекты только в / lib и / usr / lib).

Кажется, у вас есть именно эта проблема — он не может найти некоторые библиотеки. Попробуйте добавить правильный rpath (в вашем случае это / home / evan / Code / OpenNi / Init / OpenNI2 / Drivers) в строку компиляции.

1

Другие решения

У меня возникла та же проблема после компиляции этого маленького «Hello World» с Eclipse и попытки запустить его в командной строке.
«Wl, -rpath =. /» Вещь не работает для меня.
Как и обсуждалось Вот это сработало для меня после установки некоторого env. переменные перед выполнением:

export LD_LIBRARY_PATH="/path/to/OpenNI2:$LD_LIBRARY_PATH"export OPENNI2_DRIVERS_PATH="/path/to/OpenNI2/Drivers"export LD_LIBRARY_PATH="/path/to/OpenNI2/Drivers:$LD_LIBRARY_PATH"

Где-то я получил информацию, что первых двух строк должно хватить, но важна была третья. Я тоже работаю только с третьей строкой.

0

По вопросам рекламы [email protected]