这些具有非常相似名称的opencv库有什么不同?我应该将哪些项目放入项目库?

时间:2012-05-26 04:14:46

标签: eclipse opencv

我在Linux(Ubuntu)上安装了OpenCV 2.4。我尝试使用Eclipse来创建一个opencv项目。当我构建项目时,我得到collect2: ld returned 1 exit status错误,我猜这是由于缺少libs引起的。然后我把库放在这个项目中,但我发现每个lib都有三个非常相似的兄弟,比如:

libopencv_highgui.so
libopencv_highgui.so.2.4
libopencv_highgui.so.2.4.0

那么,我应该在项目库中添加哪一个?它们之间有什么不同?

最诚挚的问候。

2 个答案:

答案 0 :(得分:2)

libopencv_highgui.solibopencv_highgui.so.2.4可能是symbolic linkslibopencv_highgui.so.2.4.0

库经常这样做,以便需要链接特定版本的软件可以同时保持通用库的暴露。

当要与库的主要版本或次要版本链接的程序时,这非常有用。考虑遗留应用程序是否需要链接到libopencv_highgui的1.2版本。该程序无法链接到libopencv_highgui.so,因为这不能保证是正确的版本。但是,该计划可能会链接到libopencv_highgui.so.1.2。 libopencv_highgui.so.1.2可能是libopencv_highgui.so.1.2.3的符号链接,但这样就可以,因为第三个数字通常意味着一个小错误修复,不会破坏兼容性。

因此,这会显示您应链接的文件。这真的取决于。除非你需要依赖某个特定的小修改版的bug或怪癖,否则我肯定会避免链接到2.4.0。这将您的程序专门与2.4.0版本联系在一起。当2.4.1发布时(或者发布你的发行版包管理器),它可能不会破坏你的程序。

如果您链接到libopencv_highgui.so然后安装2.5作为主lib(然后libopencv_highgui.so链接到libopencv_highgui.so.2.5.0),您的程序可能无法正确链接第二个数字有时意味着兼容性变化。

简而言之,如果它是个人项目,只需链接到您想要的任何内容。 libopencv_highgui.so如果是个人的话可能是安全的。如果它将被分发,请确定您的代码将正确链接的库的哪个版本,然后使用最模糊的库。例如,如果您的代码适用于2.2,2.3和2.4,则应继续并链接到libopencv_highgui.so。如果它仅适用于2.4.0,则应与libopencv_highgui.so.2.4.0链接。如果它适用于2.4的任何子修订版,你应该使用libopencv_highgui.so.2.4。

基本上你必须选择你认为能够在大多数人的设置上正确链接的内容。

答案 1 :(得分:0)

我想我在这里犯了一些错误。我需要的是这些库,但是当我将它们添加到项目库中时。您应该使用这些名称,对于我在问题中提到的库,我们应该将opencv_highgui添加到eclipse库依赖项中,但是libopencv_highgui.so.2.4。为了将来的使用,我写了这些东西here