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
The void ctest1(int *); must be declared it with extern "C"
:
extern "C" {
void ctest1(int *);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With