2012-06-20 4 views
1

(Я новичок практически во всем, что я обсужу здесь ... извинения, если вопрос очень простой). Я использовал Xcode для написания кода на C++ с использованием OpenCV (динамических библиотек). Алгоритм работает плавно, и я создал исполняемый файл, который также работает. Однако он работает только на моем компьютере.Связывание статических библиотек OpenCV в Xcode

Я понимаю, что мне нужно использовать статические библиотеки вместо динамических библиотек. Я провел некоторое исследование и нашел, как это сделать здесь: http://www.shiffman.net/2011/01/23/how-to-build-opencv-static-libraries-mac-os-x/ и здесь: http://www.randomsequence.com/articles/opencv-snow-leopard/.

Я выполнил шаги и, хотя мне пришлось внести пару изменений, я смог создать «.a» файлы, такие как «libopencv_highgui.a».

Мой код, однако, больше не работает при замене библиотек. Я получаю 200+ ошибок. Это один из них:

неопределенные символы для архитектуры x86_64: "_gzputs", ссылки из: __ZL7icvPutsP13CvFileStoragePKc в libopencv_core.a (persistence.o)

Я искал этот вопрос здесь но это ближайший я мог найти: Linking OpenCV libraries in Xcode (не совсем тот же вопрос).

Спасибо всем!

ответ

2

.a файлов с $OPENCV_BUILD_PATH/3rdparty/lib/.

_gzputs из вашего вопроса принадлежит libzlib.a


Чтобы связать с OpenCV статических библиотек, также необходимо добавить зависимостей все OpenCV для вашего приложения. Большинство этих зависимостей поступают из модуля opencv_highui, а список зависимостей зависит от вашей конфигурации сборки, поэтому я не могу рассказать вам полный список. Но вы можете найти его самостоятельно: откройте CMakeCache.txt из своего каталога сборки OpenCV с любым текстовым редактором и найдите строку opencv_highgui_LIB_DEPENDS. Вам нужны все предметы из этой строки, кроме слова general.

+0

Спасибо! Это очень помогло мне. Теперь я получаю только 25% ошибок. Я думаю, что еще нужно сделать что-то о libopencv_highgui.a: 'Неопределенные символы для архитектуры i386: "_objc_msgSend", ссылочных от: _cvInitSystem в libopencv_highgui.a (window_cocoa.o) - [CVWindow cvMouseEvent:] в libopencv_highgui. a (window_cocoa.o) - [CVWindow rightMouseDragged:] в libopencv_highgui.a (window_cocoa.o) ' – lino

+0

@lino Я обновил ответ. Вам нужно связать все фреймворки/библиотеки, используемые OpenCV, потому что зависимости от статических библиотек не наследуются автоматически. –

+0

Спасибо за обновление. Я попробую! – lino

Смежные вопросы