我正在寻找帮助在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);
}
我将非常感谢任何指导。