我刚刚开始使用ZeroMQ并正在试验一些样本。我正在使用C#语言绑定,并遇到了获取DllNotFound异常的问题。
我可以在将libzmq.dll复制到Windows / System32之后在我的开发机器上加载和运行示例,但是当我将其移动到其他服务器时,我得到了错误,尽管将libzmq.dll复制到文件夹中的样本是从Windows / System32运行。
我已将clzmq.dll放入示例应用程序所在的文件夹中,并且还将libzmq.dll放入c:/ Windows / System32中。我正在运行Windows Server 2003 Service Pack 2.当我检查机器环境变量时,WINDOWS / System32在PATH变量中。我还确定使用Release构建libzmq dll,而不是调试。
我可能不理解应该如何使用ZeroMQ .Net绑定。我已将clzmq.dll(.Net Binding)添加到我的项目作为参考,我假设clzmq.dll会自动引用Windows PATH变量WINDOWS / System32上的libzmq。
有人知道我是否对此有误。 C#Binding文档(http://www.zeromq.org/bindings:clr)声明“ZeroMQ库文件需要可用于绑定才能工作”,但是尽管将其复制到PATH变量中,但它仍无法使其可用。 / p>
使用ZeroMQ .Net Bindings时,是否有人遇到过DLL未找到的异常?
感谢您的帮助,
答案 0 :(得分:8)
我在Windows Server 2008上遇到了这个确切的错误。一旦我的代码尝试创建一个clrzmq(2.2.3)对象,Windows就试图加载DLL并因错误而失败:
Unable to load DLL 'libzmq': The specified module could not be found.
DLL绝对存在。我尝试了各种具有权限的解决方案,所有这些都无法解决问题。下载&安装VS2010 C ++可再发行组件解决了我的问题。
答案 1 :(得分:2)
我检查系统确实有Microsoft Visual C ++ 2010 Redistributable后仍然遇到同样的问题。我的操作系统是Windows 7 64位。我在Visual Studio 2010中从NuGet获得了ZeroMQ库。
PS,我找到了解决我的错误的解决方案。当从VS中的NuGet下载ZeroMQ时,实际上有一个警告,我最初忽略了。它说除了clrzmq2的引用之外,手动将libzmq.dll复制到项目的输出目录。手动将libzmq.dll复制到输出目录后,它现在正在工作。顺便说一句,我试图将libzmq.dll复制到C:\ Windows \ System32,如上所述,它也没有用。
希望它有所帮助。
答案 2 :(得分:2)
如果您使用的是NuGet ZeroMQ软件包,则会收到错误消息:
Unable to load DLL 'libzmq'
转到解决方案资源管理器,看到NuGet包已经为您添加了amd64和i386文件夹。展开这些文件夹,选择其中的每个文件,然后转到“属性”窗口并选择“#34;复制如果更新" for"复制到输出目录"。
这似乎是问题最优雅的解决方案,并且可以自动适用于这两种架构。 Windows将根据体系结构搜索当前路径+ i386 / amd64。
答案 3 :(得分:0)
我遇到了问题 无法加载DLL'libzmq' 这里的问题是i386文件夹的位置。 我解决了在项目根目录中移动i386文件夹/ 32位/。 与上面的Warren解决方案类似。