OpenNI链接错误,很多未定义的引用

OpenNI linking erros, lots of undefined references

本文关键字:未定义 引用 链接 错误 OpenNI      更新时间:2023-10-16

我快疯了....我正在研究一个程序,从Xtion Primesense传感器与OpenNI和NiTE读出关节坐标。我把节目分成了三部分。主要,sensorOpenNI.hpp和sensorOpenNI.cpp。现在,当把这些部分连接在一起时,我得到了很多错误,说对一些NiTE函数有未定义的引用。我正在使用Kubuntu和g++。NiTE和OpenNI库位于一个名为Include的目录中。下面是错误信息:

/tmp/ccrPQHEg。0:函数openni::VideoFrameRef::release()': sensorOpenNI.cpp:(.text._ZN6openni13VideoFrameRef7releaseEv[openni::VideoFrameRef::release()]+0x18): undefined reference to oniframerrelease '/tmp/ccrPQHEg。0:在函数openni::VideoFrameRef::_setFrame(OniFrame*)': sensorOpenNI.cpp:(.text._ZN6openni13VideoFrameRef9_setFrameEP8OniFrame[openni::VideoFrameRef::_setFrame(OniFrame*)]+0x25): undefined reference to oniFrameAddRef'中/tmp/ccrPQHEg。0:函数nite::UserTrackerFrameRef::release()': sensorOpenNI.cpp:(.text._ZN4nite19UserTrackerFrameRef7releaseEv[nite::UserTrackerFrameRef::release()]+0x24): undefined reference to niteusertrackerframerrelease '/tmp/ccrPQHEg。0:函数nite::UserTracker::create(openni::Device*)': sensorOpenNI.cpp:(.text._ZN4nite11UserTracker6createEPN6openni6DeviceE[nite::UserTracker::create(openni::Device*)]+0x13): undefined reference to niteInitializeUserTrackersensorOpenNI.cpp:(.text._ZN4nite11UserTracker6createEPN6openni6DeviceE[nite::UserTracker::create(openni::Device*)]+0x27):对niteInitializeUserTrackerByDevice' /tmp/ccrPQHEg.o: In function的未定义引用nite::UserTracker::destroy()':sensorOpenNI.cpp:(.text._ZN4nite11UserTracker7destroyEv[nite::UserTracker::destroy()]+0x1e):对niteShutdownUserTracker' /tmp/ccrPQHEg.o: In function的未定义引用nite::UserTracker::readFrame(nite::UserTrackerFrameRef*)':sensorOpenNI.cpp:(.text._ZN4nite11UserTracker9readFrameEPNS_19UserTrackerFrameRefE[nite::UserTracker::readFrame(nite::UserTrackerFrameRef*)]+0x1d):对niteReadUserTrackerFrame' /tmp/ccrPQHEg.o: In function的未定义引用nite::UserTracker::startSkeletonTracking(short)':sensorOpenNI.cpp:(.text. _zn4nite11usertracker21startskeleton trackings [nite::UserTracker::startSkeletonTracking(short)]+0x1e):对niteStartSkeletonTracking' /tmp/ccrPQHEg.o: In function的未定义引用nite:: nite:: initialize()':sensorOpenNI.cpp:(.text._ZN4nite4NiTE10initializeEv[nite:: nite:: initialize()]+0x7):对niteInitialize' collect2: ld returned 1 exit status patrick@ubuntu:~/Koerpersteuerung$ g++ -c sensorOpenNI.cpp sensorOpenNI.hpp -I Include/ patrick@ubuntu:~/Koerpersteuerung$ g++ mainSensor.cpp sensorOpenNI.o -I Include/ sensorOpenNI.o: In function的未定义引用openni::VideoFrameRef::release()':sensorOpenNI.cpp:(.text._ZN6openni13VideoFrameRef7releaseEv[openni::VideoFrameRef::release()]+0x18):未定义的oniFrameRelease' sensorOpenNI.o: In function引用openni::VideoFrameRef::_setFrame(OniFrame*)':sensorOpenNI.cpp:(.text._ZN6openni13VideoFrameRef9_setFrameEP8OniFrame[openni::VideoFrameRef::_setFrame(OniFrame*)]+0x25):对oniFrameAddRef' sensorOpenNI.o: In function的未定义引用nite::UserTrackerFrameRef::release()':sensorOpenNI.cpp:(.text._ZN4nite19UserTrackerFrameRef7releaseEv[nite::UserTrackerFrameRef::release()]+0x24):对niteUserTrackerFrameRelease' sensorOpenNI.o: In function的未定义引用nite::UserTracker::create(openni::Device*)':sensorOpenNI.cpp:(.text._ZN4nite11UserTracker6createEPN6openni6DeviceE[nite::UserTracker::create(openni::Device*)]+0x13):对niteInitializeUserTracker' sensorOpenNI.cpp:(.text._ZN4nite11UserTracker6createEPN6openni6DeviceE[nite::UserTracker::create(openni::Device*)]+0x27): undefined reference to的未定义引用niteInitializeUserTrackerByDevice'sensorOpenNI。0:在函数nite::UserTracker::destroy()': sensorOpenNI.cpp:(.text._ZN4nite11UserTracker7destroyEv[nite::UserTracker::destroy()]+0x1e): undefined reference to中niteShutdownUserTracker'sensorOpenNI。0:在函数nite::UserTracker::readFrame(nite::UserTrackerFrameRef*)': sensorOpenNI.cpp:(.text._ZN4nite11UserTracker9readFrameEPNS_19UserTrackerFrameRefE[nite::UserTracker::readFrame(nite::UserTrackerFrameRef*)]+0x1d): undefined reference to中niteReadUserTrackerFrame'sensorOpenNI。0:在功能nite::UserTracker::startSkeletonTracking(short)': sensorOpenNI.cpp:(.text._ZN4nite11UserTracker21startSkeletonTrackingEs[nite::UserTracker::startSkeletonTracking(short)]+0x1e): undefined reference to nitestartskeletal tracking 'sensorOpenNI。0:函数nite::NiTE::initialize()': sensorOpenNI.cpp:(.text._ZN4nite4NiTE10initializeEv[nite::NiTE::initialize()]+0x7): undefined reference to niteInitializeCollect2: ld返回1退出状态

我像这样调用g++:

g++ -o test mainSensor.cpp sensorOpenNI.cpp -I Include/

尝试复制libOpenNI2库。so和libNiTE2像这样:

sudo cp ./OpenNI-Linux-x86-2.2/Redist/libOpenNI2.so /usr/local/lib 
sudo cp ./NiTE-Linux-x86-2.2/Redist/libNiTE2.so /usr/local/lib

那么做sudo ldconfig现在通过添加-lOpenNI2 -lNiTE2

来编译程序