I was missing extern "C". Thanks for helping.

On Saturday, June 22, 2013 11:10:26 AM UTC+1, Ben Noordhuis wrote:
>
> On Sat, Jun 22, 2013 at 11:57 AM, Luís Miranda 
> <[email protected]<javascript:>> 
> 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