6

node.jsのネイティブアドオンを作成し、node-gypを使用せずにMSVC ++でコンパイルし、ノードREPLとアプリケーションで正常に使用しました。x64ノードを使用してx64アドオンをコンパイルしています。node-gypでビルドできるようにしようとしています。node-gypでVisualStudioソリューションを生成してコンパイルしましたが、出力されるアドオンが機能しません。私が得る唯一のエラーはこれです:

Error: The specified procedure could not be found.

    at Object.Module._extensions..node (module.js:480:11)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at repl:1:13
    at REPLServer.self.eval (repl.js:111:21)
    at rli.on.e (repl.js:260:20)
    at REPLServer.self.eval (repl.js:118:5)
    at Interface.<anonymous> (repl.js:250:12)

アドオンをロードしようとするスクリプトを実行すると、次のようになります。

module.js:480
  process.dlopen(filename, module.exports);
          ^
Error: The specified procedure could not be found.

    at Object.Module._extensions..node (module.js:480:11)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (c:\blah\testheaders.js:1:75)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)

dlopenはLinuxでのダイナミックライブラリのロードと関係があることを学びましたが、ノード(特に、Windows)に関連する有用な情報を見つけることができません。このアドオンにはいくつかのサードパーティのdllが必要ですが、それらは私のパス上にあります。また、node-gypなしでコンパイルすると、アドオンは正常に機能します。

これを機能させる方法を理解するには、何をする必要がありますか?

4

1 に答える 1

15

NODE_MODULE マクロの使用に問題があることが判明しました。私はこのようなものを持っていました:

NODE_MODULE(SomeAddonName, Init)

しかし、私の binding.gyp はこれを持っていました:

"target_name": "totallyDifferentName",

binding.gyp の target_name は、モジュール名 (NODE_MODULE の最初の引数) と同じでなければならないことがわかりました。

これを手伝ってくれた@TooTallNateに感謝します!

于 2012-07-05T16:33:05.227 に答える