0

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

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

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

此致。

4

2 回答 2

2

libopencv_highgui.so并且libopencv_highgui.so.2.4可能是指向libopencv_highgui.so.2.4.0.

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

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

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

如果您链接libopencv_highgui.so,然后将 2.5 作为主库安装(然后 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。

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

于 2012-05-26T04:51:38.973 回答
0

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

于 2012-05-26T04:53:58.147 回答