2016-10-14 6 views
1

私は、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を含むあらゆる種類の非公式のガイドを使用しようとしました。毎回問題が同じです。

+0

'.C++'は、C++ソースファイルの一般的なファイル拡張子ではありません。私はnode-gypがファイル拡張子や他のものに基づいて別のコンパイラ(c vs C++)を選ぶのを見てきたので、ファイル拡張子を '.cc'のようなものに変更すると、役に立つかもしれません。 – mscdex

+0

@mscdex私はそれを信じることができません。あなたが正しい!私は最後に拡張機能は何も変わらないと確信していました。今それは完璧に動作します!できるだけ返答として書き直してください。 – Maxie

答えて

3

node-gyp(ノードアドオンの作成に使用されるツール)は、少なくともソースファイルのコンパイルに関しては、いくつかの前提があります。たとえば、ソースファイルの拡張子に基づいて自動的に "正しい"コンパイラを選択します。したがって、 '.c'ファイルがある場合はCコンパイラが使用され、 '.cc'ファイル(または '.cpp'ファイル)がある場合はC++コンパイラが使用されます。

'.C++'はC++ソースファイルの一般的なファイル拡張子ではないため、node-gypは予想外の拡張子(おそらくCソースファイル)を解釈している可能性があります。拡張機能をもっと一般的なものに変更することで、役立つかもしれません。

関連する問題