簡體   English   中英

節點JS - 模塊沒有自注冊

[英]Node JS - Module did not self register

我經歷了不同的帖子,他們中的大多數建議重建/重新安裝/更新npm,我試過,但沒有幫助。

我正在嘗試使用C ++的node.js示例,下面是文件詳細信息
TestNode.cpp

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


binding.gyp

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

現在執行它會拋出錯誤,說模塊不是自我注冊的。

D:\newexample>node-gyp configure
gyp info it worked if it ends with ok
gyp info using node-gyp@3.3.1
gyp info using node@5.10.0 | 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 node-gyp@3.3.1
gyp info using node@5.10.0 | 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)
>

版本信息

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

請求您指導我解決此錯誤。

編寫node.js插件並不是那么簡單,您需要顯式導出函數並調用相應的宏來向節點的模塊系統注冊插件。 閱讀Addons文檔以獲取更多信息和示例。

使用node-gyp為Node.js開發一個插件有點棘手。 您的.cpp文件需要非常適合在Node.js環境中工作。

我建議從Node.js C / C ++ Addons文檔的第一個“Hello World”示例開始。

這是.ccp文件中缺少的(非詳盡的)列表。

Node.js C ++庫

#include <node.h>

一個'init'函數,它將方法暴露給Node.js. 在這里我們可以看到在Javascript中調用addon.hello()將在C ++中調用Method函數(此處未顯示)。

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

NODE_MODULE調用,用於定義插件名稱和init函數(上圖)。 此函數的第一個參數(當前為addon )必須與binding.gyp文件中的"target_name"值匹配。 在你的情況, newexample

NODE_MODULE(addon, init)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM