4

我为节点创建了一个本机插件,一个 64 位 dll,使用/clr标志编译以访问另一个 .net dll。

一切都在我的开发盒(Windows 7、64 位)上运行良好,但是当将整个目录复制到服务器盒(Windows Server 2008 R2、64 位、.net 4.0 客户端配置文件和扩展安装)时,a

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 回答