2013-06-22 21 views
5

我正在嘗試創建一些node.js插件。在插件裏面我有一個靜態庫的調用。一切編譯好的,但是當我把我的附加功能從JavaScript,我得到如下:node.js插件上的未定義符號

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) 

我的插件代碼如下:

#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) 

有人能幫忙嗎?

謝謝

回答

6

void ctest1(int *);必須聲明爲extern "C"

extern "C" { 
    void ctest1(int *); 
}