Search code examples
c++opennigcc4.7

Error when running OpenNI 2 class ( gcc 4.7.2 / ubuntu 12.10 )


I'm trying to compile an run a very basic program given below (test.cpp) which calls the OpenNI class. You can see the files and dirs they're in here. Sorry that some characters screws up a little bit in the browser's encoding. I'm using the linux command: tree, if you know a better command tell me and I will update it.

File Structure

I'm following the guide here, see "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; 
} 

Here is what I'm running in the command line to compile it (gcc 4.7.2):

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

This works fine but when I run ./test I get the following error:

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' 

Thanks, any help would be much appreciated.


Solution

  • Instructions from your guide says, that

    It is highly suggested to also add the "-Wl,-rpath ./" to your linkage command. Otherwise, the runtime linker will not find the libOpenNI.so file when you run your application. (default Linux behavior is to look for shared objects only in /lib and /usr/lib).

    It seems you have exactly this problem -- it can not find some libraries. Try to add proper rpath (seems to be /home/evan/Code/OpenNi/Init/OpenNI2/Drivers in your case) to your compilation string.