Hey everyone,
This group's help got me up and running with my first Node.js AddOn a couple months back, I'm pretty excited that all this stuff is working. But now that I have something stable, I realize that my C++ code is a little disorganized and I should really start breaking out what I can into separate files or classes as I continue.
I'm having a pretty big problem doing this, though. I thought the problem was solely C++ oriented, but the more I look around and ask people, it sounds like I'm doing the right thing, and it might be specific to my project or just Node compilation in general.
So the problem is this - I broke out functionality into another class. I did it the proper way, and put the method signatures into a .h file and the actual methods into a .cpp file.
I then, of course, include the .h file in my main project. It all compiles fine, but then when running the addon, I get:
/usr/local/bin/node: symbol lookup error: ../node_modules/nuimotion/src/build/Release/nuimotion.node: undefined symbol: _ZN11EnumMapping15mapEventToLabelEi
Where EnumMapping is my class and mapEventToLabel is a method within.
Also weird is that I can write gibberish into my cpp file that obviously would never compile, but it does. So obviously it seems that my cpp file isn't being referenced, only the h file is being compiled in.
So, this is where I'm at. I feels like any other weird C++ problem, but everyone I talk to tell me that all they ever have to do is include the .h file and it works, but they aren't working on Node addons - and that's why I'm writing here...in case there's something Node/V8 specific.
Perhaps I'm missing a fundamental piece of information being a beginner c++ person. I see people using externs, templates, etc, and admittedly I don't really understand those concepts yet. I'm just using a plain .h file like so:
class EnumMapping
{
public:
Local<String> mapEventToLabel(int event);
Local<String> mapGeneralEventToLabel(int event);
Local<String> mapGestureToLabel(int event);
Local<String> mapErrorToLabel(int event);
}
And then my .cpp file takes the structure like so:
#include "../enums/EnumMapping.h"
Local<String> EnumMapping::mapEventToLabel(int event) {
...function body
}
...other methods...
Again, sorry if this isn't a Node specific problem, but I hope you can help!
thanks!