OpenCV и wxWidgets лечим ошибку при запуске

April 16th, 2009 Begemot Posted in Программирование

На работе пришлось знакомится с OpenCV, в процессе прикручивания ее в проект на wxWidgets, возникла довольно неприятная  проблема. Как только начинаем пользовать функций из highgui – при старте программы выскакивает MessageBox с ошибкой “Cannot initialize OLE“, и на тулбаре появляется несколько дополнительных иконо – типа окна. 

Все проблема в том что OpenCV пытается самостоятельно инициализовать OLE механизм при инициализации библиотеки и это конфликтует с wxWidgets.  Этот баг описан в баг-трекерах и OpenCV и wxWidgets – но решения пока нет. Использовали последний официальный релиз, по слухам версия из SVN должна была помочь. Выкачал, собрал – не помогло. 

Спасла нас отложенная загрузка библиотек (delay loaded), это великая идея пришла в светлую голову T-rex’a, за что ему респект и уважуха. Все просто, тперь highgui.dll запускается и инициализируется позже чем wxWidgets и все счастливы. 

Как добавить delay loaded библиотеки в ручную и с использованием CMake

Вручную – свойства проекта -> Linker -> Input -> Delay Loaded DLLs

мы используем CMake – пришлось повозится, но в конечном итоге получилось через опции командной строки линкера

set(CMAKE_EXE_LINKER_FLAGS “/delayload:highgui110d.dll /delayload:cv110d.dll /delayload:cxcore110d.dll”)

p.s. забавно что за неделю до того как мне сказали на работе ковырять OpenCV я первый раз о ней услышал, в одном из читаемых блогов.


Если пост полезен для вас вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.

Related:

Comments are closed.