【问题标题】:Undefined symbol on node.js addonnode.js插件上的未定义符号
【发布时间】:2013-06-22 18:57:30
【问题描述】:

我正在尝试创建一些 node.js 插件。在插件内部,我调用了一个静态库。一切都可以编译,但是当我从 javascript 调用我的插件函数时,我得到以下信息:

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)

有人可以帮忙吗?

谢谢

【问题讨论】:

    标签: node.js static-libraries add-on embedded-v8


    【解决方案1】:

    void ctest1(int *);必须用extern "C" 声明它:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 2017-12-09
      相关资源
      最近更新 更多