c++ - 在 C++ 中为 OS X 分发动态库

标签 c++ xcode opencv shared-libraries

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

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

  1. 将 OpenCV 编译为静态库是可行的,但我无法将我的程序静态链接到这些库,因为 OS X 中的某些库无法静态链接;我在这里找到了这个信息:Mixed static and dynamic link on Mac OS

  2. 我尝试转移到 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/

相关文章:

python - 在numpy中找到单色投影矩形的角

java - Mat 的 ConvertTo() 方法无法正常工作?

java - 奇怪的 java.lang.UnsatisfiedLinkError : Native method not found:

c++ - 如何在 E_NOTIMPL 和 E_NOINTERFACE 之间进行选择?

iphone - 预先存在的核心数据数据

iphone - 测试应用内购买可以在一台设备上运行,但不能在另一台设备上运行

ios - ipa 或 apk 中的最大文件数

java - 将 SWIG 与 C++ 的 std::map 一起使用时,Java 没有迭代器

c++ - 如何使用 C++ STL 算法重写嵌套循环?

c++ - 如何将基于 Borland 2007 构建的 C++ 代码迁移/转换到 Visual Studio 2010