2016-09-21 126 views
0

我能够按照这里的说明安装和构建openCV(http://charliegerard.github.io/blog/Installing-OpenCV/)。但是,成功创建我lib目录中发现的动态库有每个库中按以下格式命名的3个实例:每个openCV 3.1.0库的三个实例

libopencv_LibName.3.1.0.dylib

libopencv_LibName.3.1.dylib

libopencv_LibName.dylib

Screenshot of the libraries

我的下一步就是要挑出只有头文件和库我需要我的项目,而且我不确定是否真的需要使用每个库的所有3个实例。为什么要制作所有这些附加内容?我需要哪些?

附加信息:

OS:OSX埃尔卡皮坦

IDE:Xcode的7.3.1

+0

我猜测除* 3.1.0.dylib之外的所有文件都是符号链接。否则,这些文件应该是二进制相同的。是真的吗? –

+0

如何检查它们是否是二进制相同的?我试着用文本编辑器打开它,但它大部分都是一堆问号。 @RobertPrévost – Gela

+0

你可以使用'diff'。 –

回答

0

当你建立了创建实际的OpenCV库*名为.dylib二进制(libopencv_LibName.3.1 .0.dylib)包含版本,主版本和次版本。 (Release = 3,Major = 1,Minor = 0)。这允许你有一个动态链接到特定版本的库的风格。 (例如,opencv在发行版本之间通常不是完全兼容的(从2.xx到3.xx),然而它经常在主要/次要版本之间兼容(3.0.x到3.1.x))

通过链接到3.1.0版本,您正在锁定需要特定版本的库文件。 (如果你更新opencv,它仍然会使用openCV 3.1.0)。

但是,如果您链​​接到3.1版本,它只关心Release和Major版本,但会允许次要版本更新。 (目前3.1是3.1.0的符号链接,但是如果你安装了3.1.1,它现在会引用3.1.1库)。我通常最好链接到这个链接,因为它可以让你更新bug修复,但不会破坏任何功能。

最后是没有版本的符号链接,这个链接总是会引用你已经安装的最新版本的opencv。目前它引用3.1.0,但是如果你安装了3.1.1,它现在将引用3.1.1。这不会是坏事,但如果你安装4.0.0,它现在会引用这个二进制文件,并可能会破坏一些API。

+0

澄清,这是否意味着这些图书馆彼此独立,我不需要所有3? – Gela

+0

@Gela:是的,它们是同一个文件的符号链接或快捷方式。你注意到的箭头告诉你。另外,如果您使用opencv_world构建opencv,您也将拥有lib_opencv_world.3.1.0.dylib。这个库包含了一切(libcore,libimgproc,libcallib等)。 – saurabheights

+0

谢谢。我在Windows上使用了预构建的二进制文件,并在那里使用了opencv_world300.lib,但由于Mac没有预编译的二进制文件,因此我必须自己构建源文件,并以单独的库结束。你知道我如何在Mac上获得相同的opencv_world库吗?这对我来说实际上是理想的解决方案,因为我正在多个平台上构建相同的确切项目。 @saurabheights – Gela