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.


Reply via email to