私は、Windows 8.1 32bitでVS2015コンパイラとnode-gypを使ってNode用のネイティブモジュールを書くことに決めました。私はthis pageの指示で作業しました。私は自分の問題を解決するためにインターネット(StackOverflowを含む)を検索しました。ノードモジュールのコンパイルに成功し、「モジュールは自己登録しませんでした」
私は次のバージョンを使用する:
- ノード:4.6.0
- ノードGYP:3.4.0
モジュールのソースコード:
// main.c++
#include <node.h>
#include <v8.h>
void Method(const v8::FunctionCallbackInfo<v8::Value>& args) {
v8::Isolate* isolate = args.GetIsolate();
v8::HandleScope scope(isolate);
args.GetReturnValue().Set(v8::String::NewFromUtf8(isolate, "world"));
}
void init(v8::Local<v8::Object> target) {
NODE_SET_METHOD(target, "hello", Method);
}
NODE_MODULE(sapphire, init);
// binding.gyp
{
"targets": [
{
"target_name": "sapphire",
"sources": [ "main.c++" ]
}
]
}
Evエリタイムコンパイル(node-gyp rebuild
内部アドオンのソースコードフォルダと呼ばれる)が成功します。コンパイルする前にノード-Gypは[email protected] | win32 | ia32
のためにコンパイルされます。その時点まではすべてが見た目によく見えました。
テストのために、私は最も簡単なスクリプトを書いた。
// test.js
try {
var sapphire = require('/build/Release/sapphire');
console.log(sapphire.hello());
} catch(err) {
console.log(err);
}
結果がエラーError: Module did not self-register.
印刷しました。私はノードとV8をNAN(に従う)で置き換えようとしました。しかし結果は同じでした。
- 不正なバージョン(通訳に比べライブラリ):私は2つの理由に出くわした私の問題への解決策を探索中に
。残念なことに、この可能性を排除したNode-Gypは、私が使用するインタープリタと同じライブラリバージョンを使用しています。
- node_modulesからモジュールを再ダウンロードします。正直なところ、私は理由を理解していません。 Node-Gypのインストール中に必要なモジュールがすべて更新されましたが、残りは問題ありません。
このエラーの原因は何ですか?モジュールのソースコードは、ノード(v4.6.0)のドキュメントからチュートリアルからダウンロードされました。私はまた、小さな変更を加え、NANを含むあらゆる種類の非公式のガイドを使用しようとしました。毎回問題が同じです。
'.C++'は、C++ソースファイルの一般的なファイル拡張子ではありません。私はnode-gypがファイル拡張子や他のものに基づいて別のコンパイラ(c vs C++)を選ぶのを見てきたので、ファイル拡張子を '.cc'のようなものに変更すると、役に立つかもしれません。 – mscdex
@mscdex私はそれを信じることができません。あなたが正しい!私は最後に拡張機能は何も変わらないと確信していました。今それは完璧に動作します!できるだけ返答として書き直してください。 – Maxie