我编写了一个主要依赖 OpenCV 的程序。我已经从最新的稳定版本编译了OpenCV,现在想分发这个程序,以确保人们不需要自己编译OpenCV。该程序本身是使用 g++ 编译的。
我尝试了很多方法来解决这个问题:
将 OpenCV 编译为静态库是可行的,但我无法将我的程序静态链接到这些库,因为 OS X 中的某些库无法静态链接;我在这里找到了这个信息:Mixed static and dynamic link on Mac OS
我尝试转移到 XCode,在那里我将其用作命令行项目。我将搜索路径和安装位置设置为@rpath,并添加了一个构建阶段以将文件复制到可执行文件。我用 otool 验证了编译文件是否有正确的链接,但它在一台干净的机器(没有 OpenCV 库的机器)上仍然失败,并出现“找不到库@rpath/libopencv ...”错误。 (是的,所有 mac 都使用 Lion,所以 @rpath 应该可以)。这个答案是在这里找到的:Xcode keeps searching dylib at wrong path
我在编译文件和库上运行 otool -L 得到的结果是
@rpath/libopencv_core.2.4.dylib(兼容版本2.4.0,当前版本2.4.0)
/usr/lib/libstdc++.6.dylib(兼容版本7.0.0,当前版本52.0.0)
/usr/lib/libSystem.B.dylib(兼容版本1.0.0,当前版本159.1.0)
那么……我做错了什么?我如何将这些库与我的程序一起分发?
最佳答案
您应该使用框架 (SO question on frameworks)。将您的应用程序使用的所有内容合并到一个文件夹中,然后链接到您的 XCode 项目中的框架。
关于c++ - 在 C++ 中为 OS X 分发动态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10815404/