2012-06-20 97 views
1

(我在这里讨论的几乎所有的东西都会在这里讨论......如果问题非常基本,我会道歉) - 我使用Xcode使用OpenCV(动态库)编写一些C++代码。该算法运行平稳,我创建了一个可执行文件,也可以。但是,它只适用于我的电脑。在Xcode中链接OpenCV静态库

我知道我需要使用静态库而不是动态库。我已经做了一些研究,并发现如何在这里做到这一点: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多个错误。这就是其中之一:

...我已经寻找这个问题在这里libopencv_core.a __ZL7icvPutsP13CvFileStoragePKc(persistence.o):用于建筑x86_64的

未定义的符号: “_gzputs”,从引用但这是我能找到的最接近的:Linking OpenCV libraries in Xcode(不完全相同的问题)。

谢谢大家!

回答

2

您需要.a来自$OPENCV_BUILD_PATH/3rdparty/lib/的文件。

从你的问题的_gzputs属于libzlib.a


要与您还需要所有的OpenCV的依赖添加到您的应用程序OpenCV的静态库链接。大多数这些依赖来自opencv_highui模块,依赖关系列表依赖于您的构建配置,因此我无法告诉您完整列表。但是您可以自己找到它:使用任何文本编辑器从您的OpenCV构建目录打开CMakeCache.txt,并搜索opencv_highgui_LIB_DEPENDS行。除了单词general之外,您需要该行中的所有项目。

+0

谢谢!这帮了我很多。现在我只能得到25%的错误。我想我还是需要做一些关于libopencv_highgui.a:'对于架构i386的未定义符号: “_objc_msgSend”,从引用:在libopencv_highgui.a(window_cocoa.o) _cvInitSystem - [CVWindow cvMouseEvent:在libopencv_highgui。一个(window_cocoa.o) - [CVWindow rightMouseDragged:]在libopencv_highgui.a(window_cocoa.o)' – lino

+0

@lino我已经更新了答案。您需要链接OpenCV使用的所有框架/库,因为静态库的依赖关系不会自动继承。 –

+0

感谢您的更新。我会试试这个! – lino