1

我编写了一个关键依赖于 OpenCV 的程序。我已经从最新的稳定版本编译了 OpenCV,现在想分发这个程序,以确保人们不需要自己编译 OpenCV。程序本身是使用 g++ 编译的。

我尝试了很多方法来解决这个问题:

  1. 将 OpenCV 编译为静态库是可行的,但我无法将我的程序静态链接到这些库,因为 OS X 中的某些库无法静态链接;我在这里找到了这个信息:Mac OS 上的混合静态和动态链接

  2. 我试图转移到 XCode,在那里我将它用作命令行项目。我将搜索路径和安装位置设置为@rpath,并添加了一个构建阶段以将文件复制到可执行文件。我用 otool 验证了编译文件是否具有正确的链接,但它在干净的机器(没有 OpenCV 库的机器)上仍然失败,并出现“找不到库 @rpath/libopencv ...”错误。(是的,所有的 Mac 都使用 Lion,所以 @rpath 应该可以工作)。在这里找到了这个答案:Xcode 一直在错误的路径上搜索 dylib

我在编译文件和库上从 runnig otool -L 得到的结果是 @rpath/libopencv_core.2.4.dylib (compatibility version 2.4.0, current version 2.4.0) /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

所以......我做错了什么?以及如何将这些库与我的程序一起分发?

4

2 回答 2

2

您应该使用框架(关于框架的 SO 问题)。将应用程序使用的所有内容合并到一个文件夹中,然后链接到 XCode 项目中的框架。

于 2012-05-30T11:32:56.937 回答
1

我最近必须这样做才能在小程序中运行 JavaCV。此命令应该完成工作:

BADPATH=/opt/local/lib  # in the case of MacPorts, change as necessary
for f in libopencv*2.4.dylib; do install_name_tool $f -id @rpath/$f \
    -add_rpath /opt/local/lib/ -add_rpath /usr/local/lib/ -add_rpath @loader_path/. \
    -change $BADPATH/libopencv_core.2.4.dylib @rpath/libopencv_core.2.4.dylib \
    -change $BADPATH/libopencv_calib3d.2.4.dylib @rpath/libopencv_calib3d.2.4.dylib \
    -change $BADPATH/libopencv_features2d.2.4.dylib @rpath/libopencv_features2d.2.4.dylib \
    -change $BADPATH/libopencv_flann.2.4.dylib @rpath/libopencv_flann.2.4.dylib \
    -change $BADPATH/libopencv_gpu.2.4.dylib @rpath/libopencv_gpu.2.4.dylib \
    -change $BADPATH/libopencv_highgui.2.4.dylib @rpath/libopencv_highgui.2.4.dylib \
    -change $BADPATH/libopencv_imgproc.2.4.dylib @rpath/libopencv_imgproc.2.4.dylib \
    -change $BADPATH/libopencv_legacy.2.4.dylib @rpath/libopencv_legacy.2.4.dylib \
    -change $BADPATH/libopencv_ml.2.4.dylib @rpath/libopencv_ml.2.4.dylib \
    -change $BADPATH/libopencv_nonfree.2.4.dylib @rpath/libopencv_nonfree.2.4.dylib \
    -change $BADPATH/libopencv_objdetect.2.4.dylib @rpath/libopencv_objdetect.2.4.dylib \
    -change $BADPATH/libopencv_photo.2.4.dylib @rpath/libopencv_photo.2.4.dylib \
    -change $BADPATH/libopencv_video.2.4.dylib @rpath/libopencv_video.2.4.dylib; done

并将您的软件与这些和所需的“-rpath”选项重新链接。

于 2012-05-30T13:59:06.953 回答