简体   繁体   中英

Cocoapods OpenCV 2.4.10 Linker Error

I'm trying to build a simple project using OpenCV 2.4.10 but I get a bunch of errors like this:

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)

Here is ViewController.m

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

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    cv::Mat greyMat;
}

Podfile

platform :ios, '8.1'

pod 'OpenCV', '2.4.10'

Project builds just fine when I use version 2.4.9.1 or 2.4.9.
I was also able to build this project with framework file downloaded from URL which I found in podspec 2.4.10.

Bug 4052 is still unsolved for 2.4.10 and there is no pod for 2.4.11 so you have to use 2.4.9 which IMO is stable.

If your using pods

pod 'OpenCV', '2.4.9'

So here's a little workaround. The problem is because the XCode project is unable to link to the libjpeg.a library. So thats why you get the above errors when you compile the project.

Follow these steps :

  1. Go to : [[ http://sourceforge.net/projects/libjpeg-turbo/files/1.4.0/]] and download the libjpeg-turbo-1.4.0.dmg (3.8 MB) file.
  2. Install the package. Once its done you will find the installed files under this path : /opt/libjpeg-turbo/lib
  3. Open up your terminal and type the following command : lipo -info /opt/libjpeg-turbo/lib/libjpeg.a
  4. If the terminal shows the following the output after running the command then it means, you can use the library for your iOS project(armv7/armv7s)
    • Architectures in the fat file: /opt/libjpeg-turbo/lib/libturbojpeg.a are: i386 x86_64 armv6 armv7 armv7s arm64*
  5. Use finder to navigate to : /opt/libjpeg-turbo/lib and copy libjpeg.a and place it in your project folder.
  6. Head over to your XCode project -> Click on Project Name -> Targets -> General -> Linked frameworks and libraries -> Click on the add button placed at the bottom -> include the libjpeg.a file
  7. Compile the project. It shouldn't show any more libjpeg linker errors.

Seems to be an issue with the current version of Open CV for iOS

Bug #4052

Probably have to keep using 2.4.9.

I don't have a solution for this one but I have a workaround here.I have downloaded the project from here . And copied the framework and header from this project to my project. 在此输入图像描述

I've added the new versions of OpenCV to CocoaPods (2.4.11, 2.4.12, 2.4.12.3, 3.0.0).

2.4.11, 2.4.12, and 2.4.12.3 need libjpeg to be linked, so now the pod actually downloads the repo, compiles from source, and then links libjpeg in addition to the opencv2.framework file. This works out of the box now through CocoaPods, however it takes a while when doing pod install since it's compiling from source. Just make sure not to cancel it while it's doing that (there's a bug in CocoaPods that causes issues if it's canceled).

Under the hood, 3.0.0 works just like before with the prebuilt opencv2.framework file and can now be installed just fine through CocoaPods.

Version 2.4.10 is still broken in CocoaPods, but since that version throws errors while compiling from source on my machine, there's not much I can do.

(Note: I am not the original maintainer of the pod, I merely contributed these new versions.)

The same issue I faced with open CV and found a useful link below that resolved my errors of my project :

http://blog.csdn.net/iOSLearner_Nana/article/details/45174365

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM