2016-04-06 8 views
2

Ich ging durch verschiedene Beiträge & die meisten von ihnen vorschlagen, neu zu erstellen/neu installieren/update npm, die ich versuchte, aber keine Hilfe.Knoten JS - Modul nicht selbst registrieren

Ich bin ein Beispiel für node.js mit C++ versucht, unten sind die Dateidetails
TestNode.cpp

#include<iostream> 
class TestNode { 
public: 
    void printHelloW() { 
     std::cout << "Hello World!!!"; 
    } 
}; 


binding.gyp

{ 
    "targets": [ 
    { 
     "target_name": "newexample", 
     "sources": [ "TestNode.cpp" ] 
    } 
    ] 
} 

Nun ist die kommt Ausführung & es wirft den Fehler, Modul zu sagen ist nicht selbst registriert.

D:\newexample>node-gyp configure 
gyp info it worked if it ends with ok 
gyp info using [email protected] 
gyp info using [email protected] | win32 | x64 
gyp info spawn C:\Python27\python.exe 
gyp info spawn args [ 'C:\\Users\\rtv\\AppData\\Roaming\\npm\\node_modules\\node-gyp\\gyp\\gyp_main.py', 
gyp info spawn args 'binding.gyp', 
gyp info spawn args '-f', 
gyp info spawn args 'msvs', 
gyp info spawn args '-G', 
gyp info spawn args 'msvs_version=auto', 
gyp info spawn args '-I', 
gyp info spawn args 'D:\\newexample\\build\\config.gypi', 
gyp info spawn args '-I', 
gyp info spawn args 'C:\\Users\\rtv\\AppData\\Roaming\\npm\\node_modules\\node-gyp\\addon.gypi', 
gyp info spawn args '-I', 
gyp info spawn args 'C:\\Users\\rtv\\.node-gyp\\5.10.0\\include\\node\\common.gypi', 
gyp info spawn args '-Dlibrary=shared_library', 
gyp info spawn args '-Dvisibility=default', 
gyp info spawn args '-Dnode_root_dir=C:\\Users\\rtv\\.node-gyp\\5.10.0', 
gyp info spawn args '-Dnode_gyp_dir=C:\\Users\\rtv\\AppData\\Roaming\\npm\\node_modules\\node-gyp', 
gyp info spawn args '-Dnode_lib_file=node.lib', 
gyp info spawn args '-Dmodule_root_dir=D:\\newexample', 
gyp info spawn args '--depth=.', 
gyp info spawn args '--no-parallel', 
gyp info spawn args '--generator-output', 
gyp info spawn args 'D:\\newexample\\build', 
gyp info spawn args '-Goutput_dir=.' ] 
gyp info ok 

D:\newexample>node-gyp build 
gyp info it worked if it ends with ok 
gyp info using [email protected] 
gyp info using [email protected] | win32 | x64 
gyp info spawn C:\Program Files (x86)\MSBuild\14.0\bin\msbuild.exe 
gyp info spawn args [ 'build/binding.sln', 
gyp info spawn args '/clp:Verbosity=minimal', 
gyp info spawn args '/nologo', 
gyp info spawn args '/p:Configuration=Release;Platform=x64' ] 
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch. 
    TestNode.cpp 
    win_delay_load_hook.c 
    Generating code 
    Finished generating code 
    newexample.vcxproj -> D:\newexample\build\Release\\newexample.node 
gyp info ok 

D:\newexample>node 
> var obj=require("./build/Release/newexample") 
Error: Module did not self-register. 
    at Error (native) 
    at Object.Module._extensions..node (module.js:440:18) 
    at Module.load (module.js:357:32) 
    at Function.Module._load (module.js:314:12) 
    at Module.require (module.js:367:17) 
    at require (internal/module.js:16:19) 
    at repl:1:9 
    at REPLServer.defaultEval (repl.js:269:27) 
    at bound (domain.js:287:14) 
    at REPLServer.runBound [as eval] (domain.js:300:12) 
> 

Version Info

D:\newexample>node -v 
v5.10.0 

D:\newexample>npm -v 
3.8.3 

D:\newexample>node-gyp -v 
v3.3.1 

OS: Windows 7 Professional 64-bit 

Fordern Sie mich führen diesen Fehler bei der Lösung.

+0

Haben Sie das Problem behoben? Wenn ja, dass plz die Antwort posten, weil ich auch vor dem gleichen Problem genau das, was Sie gefragt haben. – user3182143

Antwort

1

Das Schreiben eines node.js Addons ist nicht ganz so einfach, Sie müssen Funktionen explizit exportieren und das entsprechende Makro aufrufen, um das Addon mit dem Modulsystem des Knotens zu registrieren. Lesen Sie die Addons documentation für weitere Informationen und Beispiele.

0

Ein Addon für Node.js mit Node-Gyp zu entwickeln ist ein bisschen schwierig. Ihre .cpp-Datei muss sehr genau auf die Arbeit in der Node.js-Umgebung zugeschnitten sein.

Ich schlage vor, beginnend mit dem allerersten "Hallo Welt" Beispiel an der Node.js C/C++ Addons Documentation.

Hier ist eine (nicht erschöpfende) Liste von Dingen, die in Ihrer .ccp-Datei fehlen.

Node.js Die C++ Bibliothek

#include <node.h> 

Ein 'init' Funktion, die Methoden Node.js. aussetzt Hier können wir sehen, dass das Aufrufen von addon.hello() in Javascript die Method-Funktion in C++ aufrufen wird (hier nicht gezeigt).

void init(Local<Object> exports) { 
    NODE_SET_METHOD(exports, "hello", Method); 
} 

A NODE_MODULE Aufruf, der den Namen und die Add-on-Funktion init (oben) definiert. Der erste Parameter dieser Funktion (derzeit addon) muss mit dem Wert "target_name" in der Datei binding.gyp übereinstimmen. In Ihrem Fall newexample.

NODE_MODULE(addon, init) 
+0

Hier ist ein vollständiges Beispiel für die Referenz https://blog.scottfrees.com/building-an-asynchronous-c-addon-for-node-js-using-nan – stanleyxu2005