Вопросы OpenCV - как заставить мою программу с OpenCV работать на другом компьютере?



как заставить мою программу с 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

приблизительно такого содержания:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>


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
  • +1
  • 15 декабря 2010, 10:50
  • noonv

Комментарии (7)

RSS свернуть / развернуть
+
0
Можно ли избежать переноса dll-файлов в папку bin, и каким либо образов вшить в реализуемую библиотеку на с++/cli? Т.е. чтобы я отдавал одну библиотеку mydllname.dll, а все используемые библиотеки opencv были в нее включены?
avatar

murlakotam

  • 19 апреля 2012, 10:00
+
0
можно использовать статическую версию библиотеки и собрать программу так, что ей вообще не будут требоваться внешние dll-ки.
avatar

noonv

  • 19 апреля 2012, 10:05
+
0
а что значит статическую версию библиотеки, или может какие то настройки есть в линкере в настройках проекта?
avatar

murlakotam

  • 19 апреля 2012, 10:54
+
0
с 2.3.1 уже идут статически собранные lib-файлы
avatar

noonv

  • 19 апреля 2012, 13:05
+
0
спасибо, буду разбираться, тока не пойму пока как их подрубать к проекту
avatar

murlakotam

  • 19 апреля 2012, 13:15
+
0
Подскажите, пожалуйста, какие все-таки библиотеки OpenCV 2.3.1 нужно перенести в папку с exe-файлом для запуска на другом компьютере?
avatar

villyz

  • 21 мая 2012, 09:00
+
+1
Нашел и на всякий случай напишу, что делать.
Копируем библиотеки из папки
C:\...\opencv\build\x86\vc9\bin
в папку с exe-файлом.
Туда же нужно добавить библиотеку tbb.dll — ее нет в официальной сборке opencv2.3.1, однако без нее opencv_imgproc231.dll работать отказывается.
avatar

villyz

  • 21 мая 2012, 11:38

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.