Не удается загрузить dll cvextern не найден указанный модуль
Невозможно загрузить DLL cvextern: указанный модуль не найден. (Исключение из HRESULT: 0x8007007E)
Я добавил файл cvextern.dll в свой проект и попробовал как «копировать всегда», так и «копировать, если новее» в свойствах файла. также сборка находится на платформе x64.
вот частично то, что я написал:
и исключение находится в последней строке.
9 ответы
Ошибка, которую вы получаете, связана не только с cvextern, эта dll фактически указывает почти на все другие библиотеки dll opencv, и все они необходимы. С этой ошибкой вам потребуется следующая dll в вашем проекте.
Обратите внимание, что «220» - это номер версии, который будет меняться в зависимости от обновлений.
- cudart64_32_16.dll
- cufft64_32_16.dll
- cvextern.dll
- npp64_32_16.dll
- opencv_calib3d220.dll
- opencv_contrib220.dll
- opencv_core220.dll
- opencv_features2d220.dll
- opencv_flann220.dll
- opencv_gpu220.dll
- opencv_highgui220.dll
- opencv_imgproc220.dll
- opencv_legacy220.dll
- opencv_ml220.dll
- opencv_objdetect220.dll
- opencv_video220.dll
Эта ошибка описана вместе с другими в моей статье о codeproject здесь.
Сообщите мне о любых других проблемах,
Я только что загрузил OpenCv версии 2.4.10 и не могу найти файлы cudart64_32_16.dll, cufft64_32_16.dll, cvextern.dll и npp64_32_16.dll. Они все еще нужны? Если это так, они НЕ находятся в сборке> x86> vc12> bin. Где их найти? - РайГай
Мне действительно нужны все эти DLL, установленные на целевой машине, только для того, чтобы запустить одну простую функцию в emgu.world ?? Как я могу узнать, какой именно нужен? - Ефрем
Эта ошибка появилась на моей стороне с Emgu CV 3.1 и я нашел для этой проблемы следующее рабочее решение:
скопируйте cvextern.dll в каталоге приложения \bin\Debug\
Надеюсь это поможет.
ответ дан 20 мар '16, в 01:03
Эта проблема возникала только при использовании Emgu в проекте пользовательского элемента управления Windows Forms, который создает dll, а не .exe. Приложения Windows Forms, использующие Emgu, нормально работали на той же машине. Я исправил это, скопировав cvextern.dll из / bin / Debug / x64 в / bin / Отладка. Проблема может заключаться в том, что библиотеки DLL, на которые есть ссылки, находятся в той же папке, тогда как .exes могут ссылаться на библиотеки DLL в других местах. - СаймонКравис
Проблема возникает при установке 8.1-разрядной версии Windows 64 приложения с использованием Emgu.CV, но не при установке Windows 10. Пытался скопировать cvextern.dll из / x64 в папку выше (которая содержит исполняемый файл), но затем я получаю исключение Bad Image Format. Может быть, это как-то связано с тем, что Win8 доступен как 32- и 64-битные ОС? - СаймонКравис
Using EMGU.CV version 4.2.0.3636
The text was updated successfully, but these errors were encountered:
emgucv commented Feb 6, 2020
GilchristT commented Feb 18, 2020
I ran into exactly the same issue and my DependencyWalker test looked exactly like the one @nikunj231991 posted above (although I don't know if that was relevant).
I eventually worked out that the issue was that the test PCs I was using had Windows 10 N installed. The N version of Windows 10 doesn't include Microsoft's Media Foundation framework. It would appear that the latest versions of OpenCV are compiled with Media Foundation support enabled but don't give very descriptive errors when it's not present.
Hope this helps
nikunj231991 commented Feb 6, 2020
bbday commented Feb 6, 2020 •
I have same issue with same code, i made a small test both windows 10:
on amd 2700 emgu 4.1 x64 work
on amd 2700 emgu 4.2 x64 not work same error in description
on amd 2700x emgu 4.1 - 4.2 x64 work
I had same issue with same report with also opencvsharp look like some issue with c++ library or i cant explain how i have same issue and same results.
mt025 commented Aug 1, 2021
@GilchristT This was exactly my issue. When windows updated from 1903 to 1909 it appears to have removed the media pack. Thanks.
Unable to load DLL 'cvextern': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
Я добавил файл cvextern.dll в свой проект и попробовал как «копировать всегда», так и «копировать, если новее» в свойствах файла. также сборка находится на платформе x64.
вот частично то, что я написал:
и исключение находится в последней строке.
Ошибка, которую вы получаете, связана не только с cvextern, эта dll фактически указывает почти на все другие библиотеки dll opencv, и все они необходимы. С этой ошибкой вам потребуется следующая dll в вашем проекте.
Обратите внимание, что «220» - это номер версии, который будет меняться в зависимости от обновлений.
- cudart64_32_16.dll
- cufft64_32_16.dll
- cvextern.dll
- npp64_32_16.dll
- opencv_calib3d220.dll
- opencv_contrib220.dll
- opencv_core220.dll
- opencv_features2d220.dll
- opencv_flann220.dll
- opencv_gpu220.dll
- opencv_highgui220.dll
- opencv_imgproc220.dll
- opencv_legacy220.dll
- opencv_ml220.dll
- opencv_objdetect220.dll
- opencv_video220.dll
Эта ошибка описана вместе с другими в моей статье о codeproject здесь .
Сообщите мне о любых других проблемах,
Я только что загрузил OpenCv версии 2.4.10 и не могу найти файлы cudart64_32_16.dll, cufft64_32_16.dll, cvextern.dll и npp64_32_16.dll. Они все еще нужны? Если это так, они НЕ находятся в сборке> x86> vc12> bin. Где их найти?
Мне действительно нужны все эти DLL, установленные на целевой машине, только для того, чтобы запустить одну простую функцию в emgu.world ?? Как я могу узнать, какой именно нужен?
Эта ошибка возникла на моей стороне, Emgu CV 3.1 и я нашел для этой проблемы следующее рабочее решение:
скопируйте cvextern.dll в каталог приложения \bin\Debug\
Надеюсь это поможет.
Эта проблема возникала только при использовании Emgu в проекте пользовательского элемента Windows Forms, который создает dll, а не .exe. Приложения Windows Forms, использующие Emgu, нормально работали на той же машине. Я исправил это, скопировав cvextern.dll из
Проблема возникает при установке 64-разрядной версии Windows 8.1 приложения с использованием Emgu.CV, но не при установке Windows 10. Пытался скопировать cvextern.dll из / x64 в папку выше (которая содержит исполняемый файл), но затем я получаю исключение Bad Image Format. Может быть, это как-то связано с тем, что Win8 доступен как 32- и 64-битные ОС?
Не удалось загрузить DLL «cvextern»: указанный модуль не найден. (Исключение из HRESULT: 0x8007007E)
Я добавил файл cvextern.dll в свой проект и попробовал параметры «копировать всегда» и «копировать, если новее» в свойствах файла. также сборка на платформе x64.
Вот частично то, что я написал:
И исключение находится в последней строке.
Ошибка, которую вы получаете, связана не только с cvextern, эта dll на самом деле указывает почти на все другие dll opencv, и все они необходимы. С этой ошибкой вам потребуется следующая DLL в вашем проекте.
Обратите внимание, что «220» — это номер версии, который будет меняться в соответствии с обновлениями.
- cudart64_32_16.dll
- cufft64_32_16.dll
- cvextern.dll
- npp64_32_16.dll
- opencv_calib3d220.dll
- opencv_contrib220.dll
- opencv_core220.dll
- opencv_features2d220.dll
- opencv_flann220.dll
- opencv_gpu220.dll
- opencv_highgui220.dll
- opencv_imgproc220.dll
- opencv_legacy220.dll
- opencv_ml220.dll
- opencv_objdetect220.dll
- opencv_video220.dll
Эта ошибка описана наряду с другими в моей статье codeproject здесь.
Любые другие проблемы, дайте мне знать,
Я только что скачал OpenCv версии 2.4.10 и не могу найти файлы cudart64_32_16.dll, cufft64_32_16.dll, cvextern.dll и npp64_32_16.dll. Эти еще нужны? Если это так, они НЕ находятся в сборке > x86 > vc12 > bin. Где я мог их найти?
Мне действительно нужны все эти dll, установленные на целевой машине, только для того, чтобы запустить одну простую функцию в emgu.world?? Как узнать какой именно нужен?
Эта ошибка появилась на моей стороне с Emgu CV 3.1 , и я нашел для этой проблемы следующее рабочее решение:
Скопируйте cvextern.dll в каталог приложения \bin\Debug\
Надеюсь это поможет.
Эта проблема появилась только при использовании Emgu в проекте управления пользователями Windows Forms, который создает dll, а не .exe. Приложения Windows Forms, использующие Emgu, работали нормально на том же компьютере. Я исправил это, скопировав cvextern.dll из
/bin/Debug. Проблема может заключаться в том, что dll-библиотекам нужны ссылки на dll-файлы в той же папке, когда .exe-файлы могут ссылаться на dll-файлы в других местах.
Проблема возникает при установке 64-разрядной версии Windows 8.1 приложения, использующего Emgu.CV, но не при установке Windows 10. Попытался скопировать cvextern.dll из /x64 в папку выше (которая содержит исполняемый файл), но затем я получаю исключение Bad Image Format. Может ли это быть как-то связано с тем, что Win8 доступна как 32-битная, так и 64-битная ОС?
Потому что есть неуправляемый код, и вы должны добавить эти ссылки в свой проект.
Cvextern.dll должен находиться в Windows\System32 для x86 и Windows\SysWOW64 для x64, у меня это работает. ps: я использовал пакет NuGet 'EmguCV' v3.1.0.1 с VS2015
Для версии 2.3 его список увеличивается с помощью opencv_ffmpeg.dll и opencv_flann231.dll.
Моя проблема с этой ошибкой заключалась в том, что VS2015 запускал веб-проект в 32-битном IIS Express. Исправление заключалось в том, чтобы убедиться, что он использует 64-битный IIS Express.
Я добавил этот код при запуске, чтобы напомнить себе при настройке новой машины
В моем случае я переключился на цель 64 и не заметил, переход на x86 заставил это уйти
Вы можете решить эту проблему, установив его с помощью диспетчера пакетов Nuget в Visual Studio 2019 Инструменты> Диспетчер пакетов NuGet > Консоль диспетчера пакетов.
Не удалось загрузить DLL «MyOwn.dll»: указанный модуль не найден. (Исключение из HRESULT: 0x8007007E)
Я прочитал и попробовал несколько решений, которые я нашел в Интернете. Ничего не работает..
Я пробовал использовать следующие методы:
Когда я попытался следовать эта статья, и когда я запускаю этот пример (из загруженного кода), он работает без проблем (используемая dll находится в папке bin/debug)
Я скопировал свою dll (вместе со всеми файлами, от которых она зависит, в мою папку bin).
Я также пробовал этот подход, но получил ту же ошибку:
Вы можете использовать инструмент dumpbin, чтобы узнать необходимые зависимости DLL:
Это скажет вам, какие библиотеки DLL необходимо загрузить вашей DLL. Особенно обратите внимание на MSVCR*.dll. Я видел, как ваш код ошибки возникает, когда правильный распространяемый компонент Visual C++ не установлен.
Вы можете получить «Распространяемые пакеты Visual C++ для Visual Studio 2013» с веб-сайта Microsoft. Он устанавливает c:\windows\system32\MSVCR120.dll
В имени файла 120 = 12.0 = Visual Studio 2013.
Будьте осторожны, чтобы у вас была правильная версия Visual Studio (10.0 = VS 10, 11 = VS 2012, 12.0 = VS 2013. ), правильная архитектура (x64 или x86) для целевой платформы вашей DLL, а также вам нужно быть осторожным отладочные сборки. Отладочная сборка DLL зависит от MSVCR120d.dll, которая является отладочной версией библиотеки, которая устанавливается вместе с Visual Studio, но не с помощью распространяемого пакета.
Есть ли способ определить, требуются ли 64-разрядные или 32-разрядные версии распространяемых компонентов?
Для тех, кто все еще страдает от этой проблемы, если вы используете двоичный файл debug , версия распространяемых компонентов среды выполнения C++ должна быть точно такой же, как и та, в которой вы ее создали.
Комментарий @skyline75489 спас меня. Библиотека C++ отлично работала на моей машине, но не смогла загрузиться где-либо еще из-за того, что VS связал ее с отладочной версией msvcr.
DLL должна находиться в папке bin.
В Visual Studio я добавляю dll в свой проект НЕ в «Ссылки», а «Добавить существующий файл». Затем установите свойство «Копировать в выходной каталог» для dll на «Копировать, если новее».
Это «кладж», но вы можете использовать его, по крайней мере, для проверки работоспособности: Попробуйте жестко указать путь к DLL в коде.
Было сказано, что; в моем случае запуск dumpbin /DEPENDENTS , предложенный @anthony-hayward, и копирование 32-разрядных версий перечисленных там библиотек DLL в мой рабочий каталог решили эту проблему для меня.
Есть одна очень забавная вещь (и имеющая техническое значение), которая может отнять у вас много времени, поэтому решил поделиться ею здесь -
Я создал проект консольного приложения ConsoleApplication1 и проект библиотеки классов ClassLibrary1 .
Весь код, выполнявший вызов p/invoke, находился в ClassLibrary1.dll . Поэтому перед отладкой приложения из Visual Studio я просто скопировал неуправляемую сборку C++ ( myUnmanagedFunctions.dll ) в каталог \bin\debug\ проекта ClassLibrary1 , чтобы его можно было загрузить во время выполнения CLR. .
Я продолжал получать
Ошибка на часы. Позже я понял, что все такие неуправляемые сборки, которые должны быть загружены, необходимо скопировать в каталог \bin\debug запускаемого проекта ConsoleApplication1 , который обычно представляет собой форму win, консоль или веб-приложение.
Поэтому, пожалуйста, будьте осторожны, Current Directory в принятом ответе на самом деле означает Current Directory основного исполняемого файла, с которого запускается процесс вашего приложения. Вроде бы очевидная вещь, но иногда это может быть не так.
Извлеченный урок. Всегда размещайте неуправляемые библиотеки DLL в том же каталоге, что и запускаемый исполняемый файл, чтобы его можно было найти.
Это исправило ситуацию и для меня. Хотя странно помещать библиотеки DLL в основной проект, а не в проект, который их фактически использует.
Это потому, что это «библиотека динамической компоновки», что означает, что она используется (загружается) во время выполнения, в отличие от статических библиотек, которые используются во время компоновки.
В моем случае одна неуправляемая dll зависела от другой, которой не было. В этом случае ошибка будет указывать на существующую dll вместо отсутствующей, что может сбивать с толку.
Именно так и произошло в моем случае. Надеюсь, это поможет кому-то другому.
По сути, это линия DOS, и вы можете настроить ее в зависимости от того, для чего создается ваша DLL.
Я думаю, что вашей неуправляемой библиотеке нужен манифест.
Вот как добавить его в свой двоичный файл. и здесь Зачем.
Таким образом, в вашем компьютере может быть установлено несколько версий распространяемой библиотеки, но только одна из них должна удовлетворять вашему приложению, и она может не быть версией по умолчанию, поэтому вам нужно сообщить системе, какая версия нужна вашей библиотеке, поэтому файл manifest.
Установка: 32-разрядная версия Windows 7
Контекст: установлен драйвер PCI-GPIB, через который мне не удалось связаться из-за вышеупомянутой проблемы.
Короткий ответ: переустановите драйвер.
Длинный ответ: Я также использовал Dependency Walker, который выявил несколько отсутствующих модулей зависимостей. Я сразу подумал, что это, должно быть, была неудачная установка драйвера. Я не хотел проверять и восстанавливать каждый отсутствующий файл.
Тот факт, что мне не удалось найти программу удаления в разделе «Программы и компоненты» панели управления, является еще одним признаком неправильной установки. Мне пришлось вручную удалить пару *.dll в \system32 и ключах реестра, чтобы можно было переустановить драйвер.
Неожиданной частью было то, что не все модули зависимостей были разрешены. Тем не менее, теперь можно сослаться на интересующую *.dll.
Не удалось загрузить DLL «PrinterSettings.dll»: указанный модуль не найден. (Исключение из HRESULT: 0x8007007E)
Я только что создал свой проект в конфигурации Режим отладки, и на этот раз мой cpp dll работал нормально.
"Невозможно загрузить DLL 'xxx.dll': указанный модуль не найден. (Исключение из HRESULT: 0x8007007E)" означает, что файл МОЖЕТ быть найден, НО это не так. смог его загрузить. Попробуйте скопировать файл DLL в корневую папку вашего приложения, некоторые библиотеки DLL должны быть доступны в корневой папке приложения, чтобы оно работало. Или проверьте, есть ли какие-либо другие зависимые DLL-файлы, необходимые для этого.
"Не удается найти DLL 'xxx.dll':. " означает, что файл НЕ МОЖЕТ быть найден. Попробуйте проверить путь. Например, [DllImport(@"\Libraries\Folder\xxx.dll")]
1.Проверена совместимость dll с 32-битным или 64-битным процессором.
2.Проверены правильные пути к папке DLL .bin, system32/sysWOW64 или заданному пути.
3. Проверено, отсутствуют ли файлы PDB (база данных программы). Лучший undestand о файлах pdb.
При запуске 32-битного двоичного кода C/C++ в 64-битной системе это может возникнуть из-за несовместимости платформы. Вы можете изменить его в меню «Сборка»> «Диспетчер конфигурации».
Это не имеет ничего общего с зависимостями, если вы проверили все зависимости и знаете, что получили их все, это не имеет ничего общего ни с тем, что файл находится в неправильном каталоге, ни с неверными АРГУМЕНТАМИ, переданными в dll, DLL не загружается с помощью LoadLibrary. Вы можете проверить, что адрес, возвращаемый из LoadLibrary, всегда 0x0000000 (не загружен).
Я не мог понять эту ошибку, либо она нормально работала в Windows 7, но в Windows 10 она не работает. Я исправил проблему, хотя она не имела ничего общего с отсутствующими зависимостями или распространяемыми пакетами Runtime.
Проблема заключалась в том, что мне пришлось упаковать DLL с upx, и она снова заработала.
Что-то с файлом, распаковываемым и скомпилированным в старой операционной системе Windows XP, создало плохой заголовок PE или плохой формат файла или что-то в этом роде, но упаковка его с помощью UPX сделала трюк теперь отлично, и DLL стала в 3 раза меньше, ха-ха.
Я получил эту ошибку для одного проекта C++ в нашем решении и только на машине нашего сборщика. Остальные из нас могли построить его без проблем.
В нашем случае это произошло потому, что в этом конкретном проекте в файле .vcxproj было установлено значение "10.0" вместо "10.0.18362.0", как и во всех других наших проектах на C++.
Отсутствие указания полного номера версии SDK, по-видимому, позволило MSBuild выбрать новейший (?) SDK и связанные инструменты сборки.
У нашего мастера сборки, вероятно, были остатки более нового SDK на его машине, и MSBuild пытался его использовать (поэтому RC.exe не был найден).
В любом случае, открыв страницу свойств проекта и изменив Свойства конфигурации > Общие > Версия Windows SDK на «10.0.18362.0» (или любую другую конкретной версии SDK, которую вы установили) для всех конфигураций/платформ проекта.
Из того, что я помню в Windows, порядок поиска dll следующий:
- Текущий каталог
- Системная папка, C:\windows\system32 or c:\windows\SysWOW64 (для 32-битного процесса на 64-битной машине).
- Чтение из переменной окружения Path
Обнаружил отсутствие некоторых зависимостей (Oracle и некоторые dll из IE). Нужно установить Oracle, так как моя dll зависит от этого . тогда я узнаю :) Нашел проблему с DependencyWalker;)
Не беспокойтесь, это избавило меня от многих часов головокружения, отличный маленький инструмент! :-)
+1 Киту Халлигану за предложение DependencyWalker. Он сказал мне, что не все зависимости имеют один и тот же тип процессора (x86/x64). Я скопировал все файлы с одинаковым типом процессора в папку bin моего приложения, и это решило проблему.
В каждой dll, которую я могу найти в своей системе, есть DependencyWalker, утверждающий, что есть ошибка с разными типами ЦП - даже System.Web.Mvc.dll. Тут какая-то ложная тревога.
В моем случае проблема заключалась в попытке загрузить DLL C++, скомпилированную для отладки. Для этого требуется среда выполнения отладки C++, что означает, что вам необходимо установить Visual Studio. Или перекомпилируйте DLL для выпуска и установите распространяемый компонент среды выполнения C++.
Попробуйте ввести полный путь к dll. Если не получится, попробуйте скопировать dll в папку system32.
nikunj231991 commented Feb 13, 2020
Bo-Grevy-StatuManu commented Feb 10, 2020
I have installed the 2 nuget packages Emgu.CV 4.2.0.3636 and Emgu.CV.runtime.windows 4.2.0.3636 in my .Net Core 3 Azure function.
When debugging locally it works perfect. When deployed to Azure I get the exception:
"The type initializer for 'Emgu.CV.CvInvoke' threw an exception. - Unable to load DLL 'cvextern' or one of its dependencies: The specified module could not be found. (0x8007007E)"
I can verify the existence of the files
emgucv commented Feb 12, 2020
nikunj231991 commented Feb 7, 2020
Please let me know if need more details.
thug1705 commented Feb 7, 2020 •
This specific install is required to install 2015/2017/2019 version of VC++, one of the versions inside those distributables of a DLL is required but not shipped in the x64/x86 folders
nikunj231991 commented Feb 14, 2020
Please find attached snap, let me know if you need more details
Really appreciate your quick response
emgucv commented Feb 13, 2020
Bo-Grevy-StatuManu commented Feb 13, 2020
Version .4.2.0.3662 solved the problem with executing in Azure Functions. Just remember to include the folder D:\home\site\wwwroot\x64 in the Environment variable PATH. Then it works perfect, thank you for the update.
Читайте также: