ZeroMQ DllNotFoundException с использованием привязок .Net - PullRequest
12 голосов
/ 18 января 2011

Я только начинаю использовать ZeroMQ и экспериментирую с некоторыми образцами. Я использую привязки языка C # и столкнулся с проблемой получения исключения DllNotFound.

Я могу загружать и запускать образцы на моей машине для разработки после копирования libzmq.dll в Windows / System32, но когда я перемещаю вещи на другие серверы, я получаю сообщение об ошибке, несмотря на копирование libzmq.dll в обе папки, в которых находятся образцы работает из / в Windows / System32.

Я поместил clzmq.dll в папку, в которой находится пример приложения, а также libzmq.dll. Также я поместил libzmq в c: / Windows / System32. Я использую Windows Server 2003 с пакетом обновления 2. Когда я проверяю переменные среды компьютера, WINDOWS / System32 находится в переменной PATH. Я также собрал библиотеку libzmq, используя Release, а не отладку.

Возможно, я не понимаю, как следует использовать привязку ZeroMQ .Net. Я добавил clzmq.dll (.Net Binding) в свой проект в качестве ссылки и предположил, что clzmq.dll будет автоматически ссылаться на libzmq в переменной Windows PATH WINDOWS / System32.

Кто-нибудь знает, если я ошибаюсь в этом? В документации по привязке C # (http://www.zeromq.org/bindings:clr) говорится, что «файл библиотеки ZeroMQ нужно будет сделать доступным для привязки к работе», но он показывает, что я не смог сделать его доступным, несмотря на то, что скопировал его в переменную PATH.

Кто-нибудь испытывал исключение DLL не найденное при использовании привязок ZeroMQ .Net?

Спасибо за помощь,

Ответы [ 4 ]

8 голосов
/ 11 октября 2012

Я столкнулся с этой точной ошибкой в ​​Windows Server 2008. Как только мой код попытался создать объект clrzmq (2.2.3), Windows попыталась загрузить DLL и потерпела неудачу с ошибкой:

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

DLL наиболее определенно присутствует. Я пытался использовать различные решения с разрешениями, но все они не смогли решить проблему. Загрузка и установка распространяемого VS2010 C ++ решили мою проблему.

2 голосов
/ 11 августа 2015

Если вы используете пакет NuGet ZeroMQ и получаете сообщение об ошибке:

Unable to load DLL 'libzmq'

Перейдите в Solution Explorer и убедитесь, что в пакете NuGet добавлены папки amd64 и i386.Разверните эти папки, выберите каждый файл в них, затем перейдите в окно «Свойства» и выберите «Копировать, если новее» для «Копировать в выходной каталог».

Это наиболее элегантное решение проблемы, и оно работает.для обеих архитектур автоматически.Windows будет искать текущий путь + i386 / amd64 на основе архитектуры.

2 голосов
/ 08 августа 2011

У меня все еще остается та же проблема после того, как я проверил, что в моей системе есть Microsoft Visual C ++ 2010 распространяемый. Моя ОС - Windows 7 64bit. Я получил библиотеку ZeroMQ от NuGet в Visual Studio 2010.

PS, я нашел решение, чтобы решить мою ошибку. При загрузке ZeroMQ из NuGet в VS на самом деле появляется предупреждение, которое я сначала проигнорировал. Он говорит, чтобы вручную скопировать libzmq.dll в выходной каталог проекта, кроме ссылки clrzmq2. После того, как вручную скопируйте libzmq.dll в выходной каталог, он работает. Кстати, я пытался скопировать libzmq.dll в C: \ Windows \ System32, как уже упоминалось выше, он тоже не работал.

Надеюсь, это поможет.

0 голосов
/ 18 марта 2018

У меня была проблема с Невозможно загрузить DLL 'libzmq'. Проблема здесь в расположении папки i386.Я решил переместить папку i386 / для 32 бит / в корень проекта.Аналогично решению Уоррена выше.

...