Node.js插件在AIX上失败,“Module not not self-register”

时间:2014-10-14 11:22:46

标签: node.js aix

我正在寻找帮助在AIX上为Node.js构建一个插件。

我正在使用一个AIX 7.1 powerpc盒子,在GitHub上从andrewlow/node获取power.cs 0.11.13 for powerpc(分支v0.11.13-release-ppc)。

Make是GNU Make v 3.81,gcc是v4.8.2。

我没有系统的超级用户权限,所以我已将Node安装到我家乡的文件夹中。

目前,我有一个非常简单的“Hello,World”插件,我正在尝试在AIX上使用。在Windows 7上的Visual Studio(2010)项目中添加了相同的cpp文件,该项目已成功构建,并且可以在Node中使用。

我能够在AIX上使用node-gyp构建插件;我将生成的.node文件复制到与我的节点可执行文件相同的文件夹中;当我尝试要求添加时,它失败了:

Error: Module did not self-register.
    at Error (native)
    at Module.load (module.js:349:32)
    at Function.Module._load (module.js:305:12)
    at Module.require (module.js:357:17)
    at require (module.js:373:17)
    at repl:1:9
    at REPLServer.defaultEval (repl.js:130:27)
    at bound (domain.js:257:14)
    at REPLServer.runBound [as eval] (domain.js:270:12)
    at REPLServer.<anonymous> (repl.js:277:12)

插件在单个文件中定义:

#include <v8.h>
#include <node.h>
#include <node_object_wrap.h>
#include <string.h>

using namespace node;
using namespace v8;

class HelloWorld : public ObjectWrap
{
public:
    static Persistent<Function> constructor;

    static void init(Handle<Object> exports)
    {
        Isolate* isolate = Isolate::GetCurrent();
        Local<FunctionTemplate> tpl = FunctionTemplate::New(isolate, New);
        tpl->SetClassName(String::NewFromUtf8(isolate, "HelloWorld"));
        tpl->InstanceTemplate()->SetInternalFieldCount(1);

        NODE_SET_PROTOTYPE_METHOD(tpl, "hello", Method);

        constructor.Reset(isolate, tpl->GetFunction());
        exports->Set(String::NewFromUtf8(isolate, "HelloWorld"), tpl->GetFunction());
    }

    static void Method(const FunctionCallbackInfo<Value>& args)
    {
        Isolate* isolate = Isolate::GetCurrent();
        HandleScope scope(isolate);
        args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));
    }

    static void New(const FunctionCallbackInfo<Value>& args)
    {
        Isolate* isolate = Isolate::GetCurrent();
        HandleScope scope(isolate);
        HelloWorld* hw = new HelloWorld();
        hw->Wrap(args.This());
        args.GetReturnValue().Set(args.This());
    }
};

Persistent<Function> HelloWorld::constructor;

extern "C" {
    static void init(Handle<Object> target)
    {
       HelloWorld::init(target);
    }

    NODE_MODULE(hello, init);
}

我将非常感谢任何指导。

0 个答案:

没有答案