13

我刚刚开始使用 ZeroMQ 并且正在尝试一些示例。我正在使用 C# 语言绑定并且遇到了获取 DllNotFound 异常的问题。

将 libzmq.dll 复制到 Windows/System32 后,我可以在我的开发机器上加载和运行示例,但是当我将内容移动到其他服务器时,尽管将 libzmq.dll 复制到示例运行所在的文件夹和进入 Windows/System32。

我已将 clzmq.dll 放入示例应用程序所在的文件夹以及 libzmq.dll 此外,我将 libzmq 放入 c:/Windows/System32。我正在运行 Windows Server 2003 Service Pack 2。当我检查机器环境变量时,WINDOWS/System32 在 PATH 变量中。我还确定使用 Release 构建 libzmq dll,而不是调试。

我可能不明白应该如何使用 ZeroMQ .Net Binding。我已将 clzmq.dll(.Net 绑定)作为参考添加到我的项目中,并且我假设 clzmq.dll 会自动引用 Windows PATH 变量 WINDOWS/System32 上的 libzmq。

有谁知道我是否弄错了。C# Binding 文档 ( http://www.zeromq.org/bindings:clr ) 指出“需要使 ZeroMQ 库文件可用以使绑定工作”,但它接缝我未能使其可用尽管将其复制到 PATH 变量中。

有没有人在使用 ZeroMQ .Net 绑定时遇到过 DLL not found 异常?

谢谢您的帮助,

4

4 回答 4

9

我在 Windows Server 2008 上遇到了这个确切的错误。当我的代码尝试创建 clrzmq (2.2.3) 对象时,Windows 尝试加载 DLL 并因错误而失败:

Unable to load DLL 'libzmq': The specified module could not be found.

DLL 绝对存在。我尝试了各种具有权限的解决方案,但都未能解决问题。下载和安装 VS2010 C++ 可再发行组件解决了我的问题。

于 2012-10-10T20:27:58.727 回答
3

如果您使用的是 NuGet ZeroMQ 包并收到错误消息:

Unable to load DLL 'libzmq'

转到解决方案资源管理器,查看 NuGet 包已为您添加了 amd64 和 i386 文件夹。展开这些文件夹,选择其中的每个文件,然后转到“属性”窗口并为“复制到输出目录”选择“如果较新则复制”。

这似乎是解决该问题的最优雅的解决方案,并且自动适用于两种架构。Windows 会根据架构搜索当前路径+i386/amd64。

于 2015-08-11T14:28:14.927 回答
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 如上所述,它也不起作用。

希望能帮助到你。

于 2011-08-08T17:26:17.040 回答
0

我遇到了无法加载 DLL 'libzmq' 的问题 这里的问题是 i386 文件夹的位置。我解决了在项目根目录中移动 i386 文件夹 / 为 32 位 / 的问题。类似于上述沃伦的解决方案。

于 2018-03-18T07:11:30.143 回答