started making an OpenNI Tundra plugin

333 views
Skip to first unread message

Toni Alatalo

unread,
Nov 8, 2012, 2:09:40 AM11/8/12
to realXtend-dev
Hi,

just for info, in case someone is wondering about / planning Kinect things with the crossplat (win, mac, linux) OpenNI library + the NITE plugin -- I've started working on that for Tundra, so far in small steps in free time.

am now focusing on user tracking as find it quite fascinating how the depth camera can (AFAIK) work for positioning where people are in a room. (up to many, is there even a limit? we've had 5 here at home with the family i think). have been thinking it might be fun to have some kind of a 'doll house' / av scene, where the way for everyone to move their AVs is to walk around in a room :) . otherwise am making this for a friend / collegue who has art installation & basic UI ideas based on pose detection, gestures, hand position tracking etc. he is doing those on a Mac and has OpenNI running there already. (I'm devving on Linux, he might end up using Linux for this too actually). I'm also eager to get to use skeleton tracking for all kinds of things .. the classic idea of the body as the input device :)

this video shows the data which will be available: basically detecting people and tracking the skels (was it up to 2) of them:
http://www.youtube.com/watch?v=jZBtJGbcOP8&feature=related

Jonne made the Windows-only Kinect module earlier which is in the main repo already, we've talked and I've read thru that too to see how the implementation with the Microsoft API works there, and how it is exposed to Tundra. But this OpenNI one is from scratch for now at least, mainly cause the deps and hence the build confs and possibly the codes have nothing in common anyways. If the modules stay separate, it might be a good idea to still expose the common parts of the data in the same way, perhaps we can make it so that for application (e.g. js) level they'd work the same .. we'll see. OpenNI works also with other devices, is by the Primesense company which earlier made Kinect for MS but who now have also their own similar sensor device and work with computer manufacturers etc. In principle the OpenNI framework is general, should work for any microphones or whatever, but in practice it now just seems to be a way to get data from Kinect-devices and use that for Primesense's proprietary NITE skeletal tracking lib.

some copy-paste from irc with details:
08:41 < antont> https://github.com/antont/tundra/blob/openni/src/Application/OpenNIPlugin/OpenNIPlugin.cpp
08:41 < antont> that's the w.i.p / beginning
08:42 < antont> the callbacks for NewUser and LostUser work, just those printf()s now, and then
there's that test slot for js usage: float2 OpenNIPlugin::GetUserPos()
08:44 < antont> all the functionality is just partial copy-paste from the NiUserTracking OpenNI
Sample, the full code there does pose detection and draws the skeleton etc, a
little opengl-glut app:
https://github.com/OpenNI/OpenNI/blob/master/Samples/NiUserTracker/main.cpp
08:44 < antont> so should continue to make all that work, the calibrations etc, and expose to js
somehow nicely

any comments or help with the code (my time can be quite limited) are welcome, but I think I'll have time to complete the basics soon enough (in a few weeks or so) anyhow.

~Toni

Toni Alatalo

unread,
Nov 8, 2012, 2:15:02 AM11/8/12
to realxt...@googlegroups.com
On Nov 8, 2012, at 9:09 AM, Toni Alatalo wrote:
> computer manufacturers etc. In principle the OpenNI framework is general, should work for any microphones or whatever, but in practice it now just seems to be a way to get data from Kinect-devices and use that for Primesense's proprietary NITE skeletal tracking lib.

oops a typo: that tried to be 'Kinect-like' devices, to include Primesense's own device and whatever they have with Asus etc.

> ~Toni

same.

Jonne Nauha

unread,
Nov 8, 2012, 2:22:23 AM11/8/12
to realxt...@googlegroups.com
My windows only (microsoft kinect sdk) implementation is kind of useless at the moment. It works great and give all the data you could ever need, and even more if I would update the SDK to the latest one where they added voice commands etc. But its useless as MS only ships the SDK as visual studio 2010 compiled binary, there are no source etc. of course so we could build it for VC 2008. If some day Tundra supports VS 2010 fully it will become relevant, but for now its not very useful :( I think they used C++11 features inside the SDK so that would be the main reason they wont/cant ship VS 2008 compiled SDK.

Hopefully Tundra will soon support Visual Studio 2010 and 2012, but we are not there yet. Only blocking lib that I know of is VLC that is of course optional. If someone knows a way to cross compile VLC for windows so that you can link against the libs from VS2010/2012 i would be very interested :) Other than VLC i think its just updating out full build deps to do a VC2010 run instead which is doable, someone just needs to do it.

Good going on OpenNI, hopefully you can support windows too there so I can test it :) Keeping the script api same as my module is not really important, but I would maybe look into it for pointers. I did take some time to actually think how it should look like to be efficient to javascript as the skeleton etc events fill fire with quite a rapid speed. Sending some QObject each even to JS land should be avoided. I did it so that it says "skeleton updated for user X" then if the script decides it wants the data, there is a getter that takes in the user id.

Best regards,
Jonne Nauha
Adminotech developer




Toni Alatalo

unread,
Nov 8, 2012, 2:37:29 AM11/8/12
to realxt...@googlegroups.com
On Nov 8, 2012, at 9:22 AM, Jonne Nauha wrote:
Good going on OpenNI, hopefully you can support windows too there so I can test it :) Keeping the script api same as my module is not really important, but I would maybe look into it for pointers. I

I should just work on win too, if you just add how OpenNI lib is found to the cmake biz. Please try if you have time at some point :) I don't currently have a win dev env but may setup one later (am getting a new laptop with win8 by default and am not sure yet if will use win there for work or (can) install ubuntu).

did take some time to actually think how it should look like to be efficient to javascript as the skeleton etc events fill fire with quite a rapid speed. Sending some QObject each even to JS land should be avoided. I did it so that it says "skeleton updated for user X" then if the script decides it wants the data, there is a getter that takes in the user id.

Efficiency is my main priority too. Especially with the depth maps, but would like to have the skel tracking somehow sensibly too. Ideally I would like to avoid copying memory, if we could access the data already in OpenNIs mem. I think with ctypes and numpy arrays and such it is possible for py, but am not sure if we can do something ideal with qtscript too.

Now I just return a MathGeoLib / Tundra core float2 from the test func, dunno how expensive that is (and how to best make a list/array of those (or float3s) perhaps).

Jonne Nauha

~Toni

Chuck

unread,
Jan 18, 2013, 8:39:11 AM1/18/13
to realxt...@googlegroups.com
Hi,

I am having problems with this OpenNI plugin. Can you help me?

I downloaded the source code from here https://github.com/antont/tundra/tree/openni and built tundra successfully. But I disabled the Mumble plugin and Asset Import plugin because of building errors, I will fix them latter but now I don't thing it would affect the OpenNI plugin. Here is the problem:

I can't generate the OpenNIPlugin.dll under the bin/plugins folder (both debug and release), but there is no errors during building (I used windows-build-tundra-debug.cmd to build). I had set the OpenNI Include and Lib paths in my VS2008. But my OpenNI is a pretty old version (1.3.4) because I need it in other application. If needed, I can upgrade my OpenNI. And my computer is Win7 64bit.

Here is the error shown in the Tundra console: 

Error: Failed to load plugin from file "C:\Users\yzhai.CSE-PC69\Desktop\tundra-openni\bin\plugins\OpenNIPlugin.dll": Error The specified module could not be found.(126)!

Do you know what is the problem? Thank you so much!

Br

Chuck

unread,
Jan 18, 2013, 10:54:16 AM1/18/13
to realxt...@googlegroups.com
Oh, I know my problem. I did not link my OpenNIPlugin source file to the Tundra well. Once I linked them, errors appeared in debug. And I found out the plugin could only be built in Linux, right?

Chuck

unread,
Jan 22, 2013, 10:46:36 AM1/22/13
to realxt...@googlegroups.com
Hi,

I am still trying to link the OpenNIPlugin in to Tundra. Now I had this error:

1>.\OpenNIPlugin.cpp(113) : warning C4101: 'hPoseInProgress' : unreferenced local variable
1>.\OpenNIPlugin.cpp(78) : warning C4101: 'hPoseCBs' : unreferenced local variable
1>.\OpenNIPlugin.cpp(113) : warning C4101: 'hPoseDetected' : unreferenced local variable
1>.\OpenNIPlugin.cpp(78) : warning C4101: 'hCalibrationStartCB' : unreferenced local variable
1>.\OpenNIPlugin.cpp(113) : warning C4101: 'hCalibrationInProgress' : unreferenced local variable
1>.\OpenNIPlugin.cpp(78) : warning C4101: 'hCalibrationCompleteCB' : unreferenced local variable
1>.\OpenNIPlugin.cpp(113) : warning C4101: 'hCalibrationStart' : unreferenced local variable
1>.\OpenNIPlugin.cpp(78) : warning C4101: 'hUserCBs' : unreferenced local variable
1>.\OpenNIPlugin.cpp(113) : warning C4101: 'hCalibrationComplete' : unreferenced local variable
1>.\OpenNIPlugin.cpp(139) : warning C4189: 'g_bCalibrated' : local variable is initialized but not referenced
1>.\OpenNIPlugin.cpp(138) : warning C4189: 'g_nPlayer' : local variable is initialized but not referenced
1>.\OpenNIPlugin.cpp(151) : warning C4100: 'frametime' : unreferenced formal parameter
1>Linking...
1>LINK : fatal error LNK1104: cannot open file 'Framework.lib'
1>OpenNIPlugin - 1 error(s), 12 warning(s)

Do you think I am missing something in Preprocessor Difinitions?

Thank you so much!
BR


On Thursday, November 8, 2012 9:09:44 AM UTC+2, antont wrote:

Jonne Nauha

unread,
Jan 22, 2013, 10:53:16 AM1/22/13
to realxt...@googlegroups.com
The recent change to TundraCore dynamic lib has removed framework.lib. It seems you have taken the older openni branch and merged latest tundra2 to it?

You just need to do some minor cmake tweaks to link it correctly. Check this commit for some pointers: https://github.com/Adminotech/tundra/commit/e0d34a6336d7de2839da92ab64d60b415b98c7e1
  • Add UseTundraCore() to make includes work in the old form.
  • Replace Framework etc. from link_modules() call to TundraCore
  • If it gives errors for kNet.lib then also add link_package_knet() (probably wont be needed in openni functionality though)
If you still have problems provide URL to the cmakelists.txt of your plugin (where ever it lies in github) and ill try to help out.

Best regards,
Jonne Nauha
Adminotech developer


--

Chuck

unread,
Jan 23, 2013, 4:29:06 AM1/23/13
to realxt...@googlegroups.com
Thank you for you help! I followed what you told me and the error before has gone. But a new error is coming out:

(OpenNIPlugin target) -> .\moc_OpenNIPlugin.cxx(45): error C2491: 'OpenNIPlugin::staticMetaObject' : definition of dllimport static data member not allowed

I am mainly using Antont's CMakeList.txt, with only some changes in the NITE part: https://github.com/antont/tundra/blob/openni/src/Application/OpenNIPlugin/CMakeLists.txt

So if you have time, please take a glance and help me out. Thanks!

Toni Alatalo

unread,
Jan 23, 2013, 1:44:43 PM1/23/13
to realxt...@googlegroups.com, realxt...@googlegroups.com
Hi - just a quick note from phone:

I've worked with OpenNI only on Linux so far, and did not consider Win at all when made the minimal work to get the Tundra plugin build for me first.

'dllimport' sounds like win, is well possible that am missing some related build conf thing related to that.

-Toni

Jonne Nauha

unread,
Jan 23, 2013, 1:55:06 PM1/23/13
to realxt...@googlegroups.com
No, it means this https://github.com/antont/tundra/blob/openni/src/Application/OpenNIPlugin/OpenNIAPI.h if defining this https://github.com/antont/tundra/blob/openni/src/Application/OpenNIPlugin/OpenNIPlugin.h#L13 incorrectly on windows. The definition needs to be export when the module is built and import when 3rd party code includes your headers.

You can fix this by adding to add_definitions(-DOPENNI_PLUGIN_EXPORTS) your cmakelists.txt just like shown here https://github.com/Adminotech/tundra/blob/admino_tundra/src/Core/TundraProtocolModule/CMakeLists.txt#L19

Best regards,
Jonne Nauha
Adminotech developer


Toni Alatalo

unread,
Jan 23, 2013, 5:56:03 PM1/23/13
to realxt...@googlegroups.com
On Wed, Jan 23, 2013 at 8:55 PM, Jonne Nauha <jo...@adminotech.com> wrote:
You can fix this by adding to add_definitions(-DOPENNI_PLUGIN_EXPORTS) your cmakelists.txt

Right-o, that sort of things I tried to mean with something build conf related.

So this should do?
'attempt to fix windows build blindly',
https://github.com/antont/tundra/commit/d8b271936c9b0b43c33493beb80b320402da6dc8 

Thanks a bunch for digging that up! As said, I just didn't get anywhere near to builds on other system yet, have much still to do with even the very basic functionality. But is sure interesting enough to be getting user position data already to Tundra JS from Kinect :)

The depth maps can be interesting for geometry creating etc. which needs to be done with efficient means, but at least the skel stuff should work simply and well in Js or whatever too. In the projects I'm working with we might end up using skel data via Tuio first for other reasons (the wall setup already gets touch input via Tuio from several network nodes, and am not surprised if it is nice to get Kinect / skeletal data that way too .. can use the existing TuioSkeleton sender and the py tuio receiver that am already using for touch, and might be handy to manage all the input / sensor data in one place .. dunno, we'll see I suppose).

But certainly is good to have basically all the OpenNI / NITE things in Tundra directly too. The camera bitmaps obviously (I mean for efficiency, to already have them in the same memory in OpenNI in Tundra) but for many cases nice for the skel as well, just simply in one app. The Tuio biz is useful if you need a network of multiple separate computers for other reasons (and perhaps if even apply multiple kinects in an installation / cave like things, we've talked about that, with e.g. 3 for a room might already be quite something).

BTW Chuck, do you have some specific part of the OpenNI API you need to use, and did you think of perhaps adding related plugin api funcs in c++ yourself or are expecting the basics to come from me/us? Am planning to add them at some point but have no idea of the schedule, especially if we need skel first and decide to do that via Tuio (am planning to test TuioSkeleton anyhow, at least if get it working easily). Ah or perhaps you are planning to just dev your OpenNI functionality in C++ directly? I've been targeting js app dev (too).

Jonne Nauha

~Toni

Chuck

unread,
Jan 24, 2013, 4:15:57 AM1/24/13
to realxt...@googlegroups.com
Thank you so much Jonne and Toni :)

I added the add_definitions(-DOPENNI_PLUGIN_EXPORTS) to my cmakelist.txt, the old error was gone but 42 new errors came. There are only two kinds of errors:

OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::~QString(void)" (__imp_??1QString@@QAE@XZ) referenced in function "public: __thiscall OpenNIPlugin::OpenNIPlugin(void)" (??0OpenNIPlugin@@QAE@XZ)
OpenNIPlugin.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall QObject::event(class QEvent *)" (?event@QObject@@UAE_NPAVQEvent@@@Z)

In my application, I only want the skeleton data and hand-point position from Kinect, no matter using OpenNI, Kinect SDK. I don't have much experience on API programming, so it would be best for me to utilize some existing plugins.

Do you think the existing KinectModule in Tundra can work now? I had tried to build it with VS2010, but failed. However, I tried to build Tundra with VS2010, it seems like working. Do you think I should choose that route?

BTW Toni, can Tuio link to Tundra as plugin now? Or your application is just developed by Tuio?

Toni Alatalo

unread,
Jan 24, 2013, 5:02:32 AM1/24/13
to realxt...@googlegroups.com
On Thu, Jan 24, 2013 at 11:15 AM, Chuck <yanch...@gmail.com> wrote:
I added the add_definitions(-DOPENNI_PLUGIN_EXPORTS) to my cmakelist.txt, the old error was gone but 42 new errors came. There are only two kinds of errors:
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::~QString(void)" (__imp_??1QString@@QAE@XZ) referenced in function "public: __thiscall OpenNIPlugin::OpenNIPlugin(void)" (??0OpenNIPlugin@@QAE@XZ)

Ok. This again seems like a win specific build thing to me, as it talks about dllimport. I don't know how to fix, might try cleaning cmake cache and running build again, just in case. Perhaps someone else can hint again.
 
In my application, I only want the skeleton data and hand-point position from Kinect, no matter using OpenNI, Kinect SDK. I don't have much experience on API programming, so it would be best for me to utilize some existing plugins.

Understood.

Do you think the existing KinectModule in Tundra can work now? I had tried to build it with VS2010, but failed. However, I tried to build Tundra with VS2010, it seems like working. Do you think I should choose that route?

It can be a good option on windows -- not because openni/nite would not work when the build things are sorted out, but just if the build things for that would be already set for you, and the Microsoft lib is nice and works well too.

Probably it is broken now due to the TundraCore refactoring or something which affects the build configs, should be simple to port to those (IIRC Jonne already hinted how in an earlier post in this thread). It is not enabled by default so I figure breaks easily with such changes.
 
BTW Toni, can Tuio link to Tundra as plugin now? Or your application is just developed by Tuio?

Tuio is a simple protocol, for sending touch & gesture etc. input events over the net using OSC (open sound control), which again is just a simple binary UDP protocol (the MIDI replacement for 2000's).

I've been happily using Tuio input with pyosc, which works in Tundra too when Python is enabed (default on Linux, but not currently in the build scripts etc. for other platforms in Tundra). Some folks have built the Tundra Python plugin on Windows recently too, AFAIK the Tundra side for it is ok but there is some work to build the dependencies (pythonqt) .. i think the ones we used to have in prebuilt deps are outdated (against older qt than what tundra win builds use now).

I got to test TUIOSkeleton yesterday, worked out of the box and seems great - tracks skeleton and hands, and recognizes hands that come close as cursors .. and i was able to receive those cursor events fine in my existing receiver. Is from https://github.com/bmwesting/TUIOSkeleton if someone is interested, and my little receiver things are https://github.com/antont/tuioinput (I didn't push the little tweaks that made for TUIOSkel receiving yet though)

So here's at least some info of those 3 options basically, I'm not sure what would be best for you but perhaps you can judge yourself, and as said, if the old MS sdk using think by Jonne works for you it is good too, and already gives skel data to Tundra (also JS) etc. The MS sdk also supports controlling the Kinect motor which is currently missing in OpenNI (other open source libs do have it, libfreenect or what was it, but they didn't have skel tracking last I heard).

~Toni

Chuck

unread,
Jan 24, 2013, 6:27:00 AM1/24/13
to realxt...@googlegroups.com
Thank you Toni, they are great information. Then I think I would have to put down OpenNI and try Kinect SDK. But I am not sure if Tundra can be built by VS2010 now. Anyway, I would try, and if I went to a dead end, I will come for everyone's help.

Again, big thank for everyone!

Jonne Nauha

unread,
Jan 24, 2013, 6:35:24 AM1/24/13
to realxt...@googlegroups.com
Here is a branch where Ali is working on VC2010 build: https://github.com/LudoCraft/Tundra/tree/VS2010. If you clone that and then check out https://github.com/LudoCraft/Tundra/blob/VS2010/tools/BuildDepsVS2010.cmd

This VC2010 work will be merged to rex/tundra2 at some point when Ali feels its ready. The KinectModule has not been maintained by me in a long time. It will need similar cmake tweaks and possibly something else to get it going.

The errors you are getting from the openni plugin still points to you having the dllimport/export incorrectly defined.

Best regards,
Jonne Nauha
Adminotech developer


--

Ali Kämäräinen

unread,
Jan 24, 2013, 7:28:21 AM1/24/13
to realxt...@googlegroups.com
Chuck, could you post the full (error) output? It seems that for some reason your plugin is not finding/linking Qt properly. I'd assume you get plenty of those errors for different Qt classes? As Toni suggested, try cleaning and rebuilding the plugin. This is always a good thing to do when modifying plugin's (/project's) CMakeLists.txt and add new preprocessor definitions. As a tip, deleting the root CMakeCache.txt and re-running CMake is also a good thing to do if and when doing solution-widge changes.

Regarding VS2010 support, I'd estimate it should be ready in a week or so.

Chuck

unread,
Jan 24, 2013, 8:12:02 AM1/24/13
to realxt...@googlegroups.com
Thx Jonne, I will try to build this version. Looking forward to the final release of VC 2010 build :)
Message has been deleted

Chuck

unread,
Jan 24, 2013, 8:18:04 AM1/24/13
to realxt...@googlegroups.com
Thank you so much for your attention and tips!! Here are the errors:

Linking...
   
Creating library C:\Users\XX\Desktop\naali-tundra2\src\Application\OpenNIPlugin\Debug\OpenNIPlugind.lib and object C:\Users\XX\Desktop\naali-tundra2\src\Application\OpenNIPlugin\Debug\OpenNIPlugind.exp
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class QString __thiscall QMetaObject::tr(char const *,char const *)const " (__imp_?tr@QMetaObject@@QBE?AVQString@@PBD0@Z) referenced in function "public: static class QString __cdecl OpenNIPlugin::tr(char const *,char const *)" (?tr@OpenNIPlugin@@SA?AVQString@@PBD0@Z)
moc_OpenNIPlugin.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: class QString __thiscall QMetaObject::tr(char const *,char const *)const " (__imp_?tr@QMetaObject@@QBE?AVQString@@PBD0@Z)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class QString __thiscall QMetaObject::trUtf8(char const *,char const *)const " (__imp_?trUtf8@QMetaObject@@QBE?AVQString@@PBD0@Z) referenced in function "public: static class QString __cdecl OpenNIPlugin::trUtf8(char const *,char const *)" (?trUtf8@OpenNIPlugin@@SA?AVQString@@PBD0@Z)
moc_OpenNIPlugin.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: class QString __thiscall QMetaObject::trUtf8(char const *,char const *)const " (__imp_?trUtf8@QMetaObject@@QBE?AVQString@@PBD0@Z)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class QString __thiscall QMetaObject::tr(char const *,char const *,int)const " (__imp_?tr@QMetaObject@@QBE?AVQString@@PBD0H@Z) referenced in function "public: static class QString __cdecl OpenNIPlugin::tr(char const *,char const *,int)" (?tr@OpenNIPlugin@@SA?AVQString@@PBD0H@Z)
moc_OpenNIPlugin.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: class QString __thiscall QMetaObject::tr(char const *,char const *,int)const " (__imp_?tr@QMetaObject@@QBE?AVQString@@PBD0H@Z)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class QString __thiscall QMetaObject::trUtf8(char const *,char const *,int)const " (__imp_?trUtf8@QMetaObject@@QBE?AVQString@@PBD0H@Z) referenced in function "public: static class QString __cdecl OpenNIPlugin::trUtf8(char const *,char const *,int)" (?trUtf8@OpenNIPlugin@@SA?AVQString@@PBD0H@Z)
moc_OpenNIPlugin.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: class QString __thiscall QMetaObject::trUtf8(char const *,char const *,int)const " (__imp_?trUtf8@QMetaObject@@QBE?AVQString@@PBD0H@Z)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::~QString(void)" (__imp_??1QString@@QAE@XZ) referenced in function "public: __thiscall OpenNIPlugin::OpenNIPlugin(void)" (??0OpenNIPlugin@@QAE@XZ)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::QString(char const *)" (__imp_??0QString@@QAE@PBD@Z) referenced in function "public: __thiscall OpenNIPlugin::OpenNIPlugin(void)" (??0OpenNIPlugin@@QAE@XZ)
OpenNIPlugin.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall QObject::event(class QEvent *)" (?event@QObject@@UAE_NPAVQEvent@@@Z)
OpenNIPlugin.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall QObject::eventFilter(class QObject *,class QEvent *)" (?eventFilter@QObject@@UAE_NPAV1@PAVQEvent@@@Z)
OpenNIPlugin.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall QObject::timerEvent(class QTimerEvent *)" (?timerEvent@QObject@@MAEXPAVQTimerEvent@@@Z)
OpenNIPlugin.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall QObject::childEvent(class QChildEvent *)" (?childEvent@QObject@@MAEXPAVQChildEvent@@@Z)
OpenNIPlugin.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall QObject::customEvent(class QEvent *)" (?customEvent@QObject@@MAEXPAVQEvent@@@Z)
OpenNIPlugin.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall QObject::connectNotify(char const *)" (?connectNotify@QObject@@MAEXPBD@Z)
OpenNIPlugin.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall QObject::disconnectNotify(char const *)" (?disconnectNotify@QObject@@MAEXPBD@Z)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QVariant::~QVariant(void)" (__imp_??1QVariant@@QAE@XZ) referenced in function "public: class QList __thiscall OpenNIPlugin::test(void)" (?test@OpenNIPlugin@@QAE?AV?$QList@VQVariant@@@@XZ)
moc_OpenNIPlugin.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall QVariant::~QVariant(void)" (__imp_??1QVariant@@QAE@XZ)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QVariant::QVariant(float)" (__imp_??0QVariant@@QAE@M@Z) referenced in function "public: class QList __thiscall OpenNIPlugin::test(void)" (?test@OpenNIPlugin@@QAE?AV?$QList@VQVariant@@@@XZ)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: bool __thiscall QBasicAtomicInt::ref(void)" (__imp_?ref@QBasicAtomicInt@@QAE_NXZ) referenced in function "public: __thiscall QList::QList(void)" (??0?$QList@VQVariant@@@@QAE@XZ)
moc_OpenNIPlugin.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: bool __thiscall QBasicAtomicInt::ref(void)" (__imp_?ref@QBasicAtomicInt@@QAE_NXZ)
OpenNIPlugin.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: static struct QListData::Data QListData::shared_null" (__imp_?shared_null@QListData@@2UData@1@A)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: bool __thiscall QBasicAtomicInt::deref(void)" (__imp_?deref@QBasicAtomicInt@@QAE_NXZ) referenced in function "public: __thiscall QList::~QList(void)" (??1?$QList@VQVariant@@@@QAE@XZ)
moc_OpenNIPlugin.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: bool __thiscall QBasicAtomicInt::deref(void)" (__imp_?deref@QBasicAtomicInt@@QAE_NXZ)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void * * __thiscall QListData::append(void)" (__imp_?append@QListData@@QAEPAPAXXZ) referenced in function __catch$?append@?$QList@VQVariant@@@@QAEXABVQVariant@@@Z$0
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: bool __thiscall QBasicAtomicInt::operator!=(int)const " (__imp_??9QBasicAtomicInt@@QBE_NH@Z) referenced in function "public: void __thiscall QList::append(class QVariant const &)" (?append@?$QList@VQVariant@@@@QAEXABVQVariant@@@Z)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void * * __thiscall QListData::end(void)const " (__imp_?end@QListData@@QBEPAPAXXZ) referenced in function __catch$?detach_helper_grow@?$QList@VQVariant@@@@AAEPAUNode@1@HH@Z$0
moc_OpenNIPlugin.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: void * * __thiscall QListData::end(void)const " (__imp_?end@QListData@@QBEPAPAXXZ)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl qFree(void *)" (__imp_?qFree@@YAXPAX@Z) referenced in function __catch$?detach_helper_grow@?$QList@VQVariant@@@@AAEPAUNode@1@HH@Z$0
moc_OpenNIPlugin.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) void __cdecl qFree(void *)" (__imp_?qFree@@YAXPAX@Z)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: struct QListData::Data * __thiscall QListData::detach_grow(int *,int)" (__imp_?detach_grow@QListData@@QAEPAUData@1@PAHH@Z) referenced in function "private: struct QList::Node * __thiscall QList::detach_helper_grow(int,int)" (?detach_helper_grow@?$QList@VQVariant@@@@AAEPAUNode@1@HH@Z)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void * * __thiscall QListData::begin(void)const " (__imp_?begin@QListData@@QBEPAPAXXZ) referenced in function "private: struct QList::Node * __thiscall QList::detach_helper_grow(int,int)" (?detach_helper_grow@?$QList@VQVariant@@@@AAEPAUNode@1@HH@Z)
moc_OpenNIPlugin.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: void * * __thiscall QListData::begin(void)const " (__imp_?begin@QListData@@QBEPAPAXXZ)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: struct QListData::Data * __thiscall QListData::detach(int)" (__imp_?detach@QListData@@QAEPAUData@1@H@Z) referenced in function "private: void __thiscall QList::detach_helper(int)" (?detach_helper@?$QList@VQVariant@@@@AAEXH@Z)
moc_OpenNIPlugin.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: struct QListData::Data * __thiscall QListData::detach(int)" (__imp_?detach@QListData@@QAEPAUData@1@H@Z)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: bool __thiscall QBasicAtomicInt::operator==(int)const " (__imp_??8QBasicAtomicInt@@QBE_NH@Z) referenced in function "private: void __thiscall QList::free(struct QListData::Data *)" (?free@?$QList@VQVariant@@@@AAEXPAUData@QListData@@@Z)
moc_OpenNIPlugin.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: bool __thiscall QBasicAtomicInt::operator==(int)const " (__imp_??8QBasicAtomicInt@@QBE_NH@Z)
OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QVariant::QVariant(class QVariant const &)" (__imp_??0QVariant@@QAE@ABV0@@Z) referenced in function "private: void __thiscall QList::node_construct(struct QList::Node *,class QVariant const &)" (?node_construct@?$QList@VQVariant@@@@AAEXPAUNode@1@ABVQVariant@@@Z)
moc_OpenNIPlugin.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall QVariant::QVariant(class QVariant const &)" (__imp_??0QVariant@@QAE@ABV0@@Z)
moc_OpenNIPlugin.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl qt_assert(char const *,char const *,int)" (__imp_?qt_assert@@YAXPBD0H@Z) referenced in function "public: class QObjectData * __thiscall QScopedPointer >::operator->(void)const " (??C?$QScopedPointer@VQObjectData@@U?$QScopedPointerDeleter@VQObjectData@@@@@@QBEPAVQObjectData@@XZ)
C:\Users\XX\Desktop\naali-tundra2\src\Application\OpenNIPlugin\Debug\OpenNIPlugind.dll : fatal error LNK1120: 28 unresolved externals

OpenNIPlugin - 42 error(s), 0 warning(s)

Ali Kämäräinen

unread,
Jan 24, 2013, 8:26:12 AM1/24/13
to realxt...@googlegroups.com
Ok, try cleaning CMake cache, rerunning CMake and rebuilding the project. Do other Tundra projects build just fine? BTW, the DLL export and import biz is need only if the OpenNIPlugin is used from other DLLs. I'd assume currently PythonScriptModule uses and links to OpenNIPlugin? Do you intent to use Python scripting? If not, you can simply remove the PythonScriptModule from the build.

to...@playsign.net

unread,
Jan 24, 2013, 8:47:14 AM1/24/13
to realxt...@googlegroups.com
No, no other Tundra project uses OpenNIPlugin, it just registers to framework and I’ve been using it from JS via the dynamic object registration thing.
 
With the alternative of using TUIO with Py, OpenNI is not used in Tundra, only the simple UDP message listener. In that case OpenNI is used in a different process (possibly on a different compu) which sends the OSC messages.
 
~Toni

 

--
Reply all
Reply to author
Forward
0 new messages