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 я первый раз о ней услышал, в одном из читаемых блогов.