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

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

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

Я следую руководству здесь, см. "GCC / GNU Делать".

#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' 

Спасибо, любая помощь будет принята с благодарностью.


person Evan Rolfe    schedule 17.01.2013    source источник


Ответы (2)


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

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

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

person Konstantin Vladimirov    schedule 18.01.2013

У меня была такая же проблема после компиляции этого маленького «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"

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

person Michael W.    schedule 17.04.2015