4

ノード用のネイティブアドオンである64ビットdllを作成し、/clrフラグを使用してコンパイルして、別の.netdllにアクセスしました。

すべてが私の開発ボックス(Windows 7、64ビット)でうまく機能しますが、ディレクトリ全体をサーバーボックス(Windows Server 2008 R2、64ビット、.net 4.0クライアントプロファイルおよび拡張インストール済み)にコピーすると、

var myaddon = require('./build/Release/myaddon');

次のエラーが発生します。

module.js:485
  process.dlopen(filename, module.exports);
          ^
Error: The specified module could not be found.
C:\Users\x\build\Release\myaddon.node
    at Object.Module._extensions..node (module.js:485: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)

「myaddon.node」ファイルが正常に検出されたことはわかっています。存在しないファイルを指すようにrequireステートメントを少し変更すると、別のエラーメッセージが表示されるためです。

requireステートメントがないと、ノードは正常に起動します。

なぜエラーとそれを修正する方法ですか?

4

1 に答える 1

7

デバッグ目的でプラグインをゼロから開始した後、問題なく/clr動作しました-私はそれを理解しました。

  • '/clr' フラグを設定すると、'/MT' (ランタイム ライブラリの静的リンク) を '/MD' (rt ライブラリの動的リンク) に変更する必要があります。
  • 動的リンクとは、C++ dll をターゲット マシンにインストールする必要があることを意味します。

私の場合、サーバーにMicrosoft Visual C++ 2010 SP1 Redistributable Package (x64)をインストールすることを意味していました。

于 2012-07-17T03:58:27.420 に答える