Cocoapods OpenCV 2.4.10链接器错误

foo*_*baz 25 xcode opencv ios cocoapods

我正在尝试使用OpenCV 2.4.10构建一个简单的项目,但是我得到了一堆这样的错误:

Undefined symbols for architecture x86_64:
  "_jpeg_free_large", referenced from:
      _free_pool in opencv2(jmemmgr.o)
  "_jpeg_free_small", referenced from:
      _free_pool in opencv2(jmemmgr.o)
      _self_destruct in opencv2(jmemmgr.o)

这是ViewController.m

#import "ViewController.h"
#import <opencv2/opencv.hpp>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    cv::Mat greyMat;
}
Run Code Online (Sandbox Code Playgroud)

Podfile

platform :ios, '8.1'

pod 'OpenCV', '2.4.10'
Run Code Online (Sandbox Code Playgroud)

当我使用2.4.9.1或2.4.9版时,Project构建得很好.
我还能够使用从podspec 2.4.10中找到的URL下载的框架文件构建此项目.

Xei*_*han 18

错误4052仍未解决2.4.10并且没有2.4.11的pod,所以你必须使用2.4.9 IMO是稳定的.

如果你使用pods

pod 'OpenCV', '2.4.9'
Run Code Online (Sandbox Code Playgroud)


小智 11

所以这里有一点解决方法.问题是因为XCode项目无法链接到libjpeg.a库.这就是为什么在编译项目时出现上述错误的原因.

跟着这些步骤 :

  1. 转到:[[ http://sourceforge.net/projects/libjpeg-turbo/files/1.4.0/]]并下载libjpeg-turbo-1.4.0.dmg(3.8 MB)文件.
  2. 安装包.完成后,您将在此路径下找到已安装的文件:/ opt/libjpeg-turbo/lib
  3. 打开终端并输入以下命令:lipo -info /opt/libjpeg-turbo/lib/libjpeg.a
  4. 如果终端在运行命令后显示以下输出,则意味着,您可以将该库用于您的iOS项目(armv7/armv7s)
    • 胖文件中的体系结构:/opt/libjpeg-turbo/lib/libturbojpeg.a是:i386 x86_64 armv6 armv7 armv7s arm64*
  5. 使用finder导航到:/ opt/libjpeg-turbo/lib并复制libjpeg.a并将其放在项目文件夹中.
  6. 转到你的XCode项目 - >点击Project Name - > Targets - > General - > Linked frameworks and libraries - >点击底部的添加按钮 - >包含libjpeg.a文件
  7. 编译项目.它不应该再显示libjpeg链接器错误.


小智 5

似乎是当前版本的Open CV for iOS的一个问题

Bug#4052

可能必须继续使用2.4.9.


Kyl*_*ing 2

我已将新版本的 OpenCV 添加到 CocoaPods(2.4.11、2.4.12、2.4.12.3、3.0.0)。

2.4.11、2.4.12和2.4.12.3需要链接libjpeg,所以现在pod实际上下载repo,从源代码编译,然后除了opencv2.framework文件之外还链接libjpeg。现在可以通过 CocoaPods 开箱即用,但是pod install由于它是从源代码编译的,因此需要一段时间。只要确保在执行此操作时不要取消它(CocoaPods 中存在一个错误,如果取消它会导致问题)。

在底层,3.0.0 的工作方式与以前一样,使用预构建的 opencv2.framework 文件,现在可以通过 CocoaPods 很好地安装。

2.4.10 版本在 CocoaPods 中仍然存在问题,但由于该版本在我的机器上从源代码编译时会抛出错误,因此我无能为力。

(注:我不是 pod 的原始维护者,我只是贡献了这些新版本。)