2015-02-04 69 views
25

我嘗試使用OpenCV的2.4.10建立一個簡單的項目,但我得到這樣一堆錯誤:的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; 
} 
當我使用的版本2.4.9.1或2.4.9

Podfile

platform :ios, '8.1' 

pod 'OpenCV', '2.4.10' 

項目建立就好了。
我也能夠用從我在podspec 2.4.10中找到的URL下載的框架文件來構建這個項目。

+1

人誰downvoted - 請同時告訴你爲什麼downvoted它。問題存在。 –

回答

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,從源代碼編譯,然後鏈接libjpeg和opencv2.framework文件。這可以通過CocoaPods直接使用,但是從源代碼編譯以來需要花費一些時間來做pod install。只要確保不要取消它(在CocoaPods中有一個bug,如果它被取消,會導致問題)。

在引擎蓋下,3.0.0和以前一樣使用預構建的opencv2.framework文件,現在可以通過CocoaPods輕鬆安裝。

版本2.4.10在CocoaPods中仍然存在問題,但由於該版本在我的機器上從源代碼編譯時會引發錯誤,因此我無法做到。

(注:我不是吊艙的維護者,我只是促成這些新版本。)

+0

唉,使用一個非常簡單的Podfile,這些工作都不起作用: http://pastebin.com/hbjNTF9H – shmim

+0

shmim,這很奇怪。當您訪問http://download.sourceforge.net/project/opencvlibrary/opencv-ios/3.0.0/opencv2.framework.zip時會發生什麼?你能下載文件嗎? –

+0

當我發佈我的評論時,sourceforge鏈接不工作,但他們似乎現在正在工作。我聽說過這種情況發生之前... 3.0下載,我假設它的工作原理,雖然我還沒有測試過。但是,版本2.4.11,2.4.12,2.4.12.3都會拋出編譯器錯誤:https://paste.ee/p/ACvj0 – shmim

5

似乎與開放CV的當前版本的問題適用於iOS

Bug #4052

可能不得不使用2.4.9保持。

+0

由於應用程序現在需要64位,所以無法使用2.4.9。 – ahwulf

2

我沒有解決方案,但我有一個解決方法here.I已從here下載該項目。並將該項目的框架和頭文件複製到我的項目中。 enter image description here

18

Bug 4052仍然沒有解決2.4.10和2.4.11沒有吊艙,所以你必須使用2.4.9 IMO是穩定的。

如果您使用的豆莢

pod 'OpenCV', '2.4.9' 
+0

pod分佈似乎被破壞(SourceForge鏈接錯誤)。有關修復,請參閱http://stackoverflow.com/a/31226206/1375695。 – foundry

10

所以這裏有一個小的解決方法。問題是因爲XCode項目無法鏈接到libjpeg.a庫。所以這就是爲什麼當你編譯項目時出現上述錯誤。

遵循以下步驟:

  1. 進入:[http://sourceforge.net/projects/libjpeg-turbo/files/1.4.0/]]並下載libjpeg的渦輪增壓-1.4.0.dmg(3.8 MB)文件。
  2. 安裝包裝。一旦它的完成,你會發現此路徑下安裝的文件:的/ opt/libjpeg的渦輪增壓/ lib目錄
  3. 打開你的終端,然後鍵入以下命令:脂-info的/ opt/libjpeg的渦輪增壓/ lib中/的libjpeg .A
  4. 如果終端顯示運行命令之後再把下面的輸出就意味着,你可以使用庫您的iOS項目(ARMv7的/ armv7s)
    • 架構在FAT文件中:/ opt /的libjpeg -turbo/lib/libturbojpeg.a是:i386 x86_64 armv6 armv7 armv7s arm64 *
  5. 使用查找器導航到:/ opt/libjpeg-turbo/lib並複製libjpeg.a並將其放置在項目文件夾中。
  6. 轉到您的XCode項目 - >點擊項目名稱 - >目標 - >常規 - >鏈接框架和庫 - >點擊放置在底部的添加按鈕 - >包含libjpeg.a文件
  7. 編譯該項目。它不應該顯示更多的libjpeg鏈接器錯誤。
+0

本手冊很酷!謝謝!我只是將/ opt/libjpeg-turbo/lib中的libjpeg.a添加到我的項目中。但是我必須在項目設置中禁用位代碼選項。因爲,據我瞭解,該庫已經編譯沒有bitcode選項。 –

+0

我最近設置探索iOS上的OpenCV,發現將libjpeg.a添加到我的項目的推薦指令不能解決問題。沒有未定義的符號,我得到了許多重複的符號。我想出了一個解決方法,即下載OpenCV源代碼並獲取以下8個文件並將它們添加到我的iOS項目中。這具有定義由jmemansi.c導出的符號的效果。我不太瞭解XCode或OpenCV中使用的構建系統來製作更優雅的修補程序,但我認爲我會傳遞適用於我的解決方案。我複製到我的項目文件的 –

+0

名單: jconfig.h jinclude.h \t memsys.h jpegint.h jerror.h memansi.c jmorecfg.h jpeglib.h –