как заставить мою программу с OpenCV работать на другом компьютере (Windows)?
Нет ничего удивительного, что программа с использованием OpenCV не запустилась на другом компьютере 🙂 Причиной является в том, что вместе с программой нужно также переносить dll-файлы библиотеки OpenCV.
Они находятся в директории
OpenCV-2.0.0\bin\Release\
скопируйте их в директорию к своему exe-файлу и пробуйте 🙂
Совсем не обязательно копировать все dll-файлы. Нужно просто определить — какие именно dll-файлы OpenCV вам необходимы для работы.
Например, если вы не используется функции машинного обучения, то линковать ml200.lib не нужно и ml200.dll так же явно лишний.
Посмотреть, какие именно dll-файлы требуются для работы вашей программы можно с помощью утилиты Dependency Walker
Всё ещё не заработало?
тогда вам не хватает Microsoft Visual C++ Redistruatable
вам нужно или скачать инсталлятор vcredist_x86.exe с сайта майкрософта:
Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)
Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)
либо проделать несколько шагов вручную:
1. Пересобрать свою программу с использованием внешнего манифеста (Project|Properties|Configuration Properties|Manifest Tool|Input and Output|Embed Manifest: No)
при этом в каталоге вместе с exe-ком появится файл
название_программы.exe.manifest
приблизительно такого содержания:
2. открываете этот файл на редактирование и удаляете все упоминания publicKeyToken
3. копируете все требуемые файлы из %ProgramFiles%\Microsoft Visual Studio 9.0\VC\redist\x86 в директорию к своему приложению
в простейшем случае это директории:
Microsoft.VC90.CRT\
Microsoft.VC90.OPENMP\
4. открыв эти директории вы так же увидите файлы манифеста:
Microsoft.VC90.CRT.manifest
Microsoft.VC90.OpenMP.manifest
их так же нужно отредактировать и убрать publicKeyToken
возможно, потребуется скопировать файл
Microsoft.VC90.OPENMP\vcomp90.dll
напрямую в каталог вашего exe-ника
Вот и всё!
Теперь ваша программа должна запускаться на любом компьютере под управлением Windows — даже под Windows Embedded.
Ссылки
Howto: Deploy VC2008 apps without installing vcredist_x86.exe
0 комментариев на «“Вопросы OpenCV — как заставить мою программу с OpenCV работать на другом компьютере?”»
Можно ли избежать переноса dll-файлов в папку bin, и каким либо образов вшить в реализуемую библиотеку на с++/cli? Т.е. чтобы я отдавал одну библиотеку mydllname.dll, а все используемые библиотеки opencv были в нее включены?
можно использовать статическую версию библиотеки и собрать программу так, что ей вообще не будут требоваться внешние dll-ки.
а что значит статическую версию библиотеки, или может какие то настройки есть в линкере в настройках проекта?
с2.3.1 уже идут статически собранные lib-файлы
спасибо, буду разбираться, тока не пойму пока как их подрубать к проекту
Подскажите, пожалуйста, какие все-таки библиотеки OpenCV 2.3.1 нужно перенести в папку с exe-файлом для запуска на другом компьютере?
Нашел и на всякий случай напишу, что делать.
Копируем библиотеки из папки
C:\…\opencv\build\x86\vc9\bin
в папку с exe-файлом.
Туда же нужно добавить библиотеку tbb.dll — ее нет в официальной сборке opencv2.3.1, однако без нее opencv_imgproc231.dll работать отказывается.