On Sat, Jun 22, 2013 at 11:57 AM, Luís Miranda <[email protected]> wrote: > I'm trying to create some node.js addons. Inside the addon i have a call to > a static lib. Everything compiles ok, but when i call my addon function from > javascript, i get the following: > > > module.js:356 > Module._extensions[extension](this, filename); > ^ > Error: /home/.../Projects/NodeAddonComLibTest/build/Debug/addon.node: > undefined symbol: _Z6ctest1Pi > at Module.load (module.js:356:32) > at Function.Module._load (module.js:312:12) > at Module.require (module.js:364:17) > at require (module.js:380:17) > at Object.<anonymous> > (/home/.../Projects/NodeAddonComLibTest/doTest.js:1:75) > at Module._compile (module.js:456:26) > at Object.Module._extensions..js (module.js:474:10) > at Module.load (module.js:356:32) > at Function.Module._load (module.js:312:12) > at Function.Module.runMain (module.js:497:10) > > > My addon code is the following: > > #include <iostream> > #include <string.h> > #include <stdlib.h> > > #include <node.h> > #include <v8.h> > > using namespace v8; > using namespace std; > > void ctest1(int *); > > Handle<Value> setPort(const Arguments& args){ > HandleScope scope; > > if (args.Length() != 1) { > ThrowException(Exception::TypeError(String::New("Wrong number of > arguments."))); > return scope.Close(Undefined()); > } > > // ========================= > printf("Calling static lib...\n"); > int x=0; > ctest1(&x); > printf("Val c=%d\n", x); > // ========================= > > return scope.Close(Number::New(args[0]->NumberValue())); > } > > void Init(Handle<Object> exports) { > exports->Set(String::NewSymbol("show"), > FunctionTemplate::New(setPort)->GetFunction()); > } > > NODE_MODULE(addon, Init) > > > Can someone help? > > Thanks > > (http://stackoverflow.com/questions/17249378/undefined-symbol-on-node-js-addon)
Where is ctest1 defined? And more importantly: how? It currently has C++ linkage (hence the mangled name.) If it's a symbol from a C library, declare it with `extern "C"`. You mention it's a static library. Have you verified that the symbol actually gets compiled into the .node file? `nm file.node | grep ctest1` should print the symbol name, prefixed by a T or t. -- -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
