2013-05-01 148 views
3

的Xcode 4.6,iOS版SDK 6.1,正方體-OCR 3.02

自上OpenCV的版本使用的libC++建成,正方體-OCR使用的libstdC++建成,他們能夠」在一個xcode項目中一起使用。
所以,我試圖用libC++構建tesseract。使用腳本here(將基本sdk和部署目標更新到6.1),tesseract正在構建得很好,一旦將C++標準庫設置爲編譯器默認值,就可以在我的xcode項目中運行。根據回答here,我嘗試改變腳本以使用libC++構建它。我改變CXX指向鐺++,並加入-stdlib = libc的++CXXFLAGS
結果是腳本成功,圖書館都建,但選擇的libC++作爲在Xcode C++標準庫時,我得到了很多的鏈接錯誤和項目生成失敗。當標準庫設置爲編譯器默認值時(如同定期創建時),新庫仍然可以工作。

我錯過了什麼?的Tesseract-OCR 3.02用的libC++

+0

什麼是第一個鏈接錯誤? – 2013-05-02 15:11:13

+0

感謝您的回覆。 「架構armv7s的未定義符號」以及大量來自整個庫的「std :: ....」。我的有效體系結構是爲armv7和armv7s設置的,「Build Active Architecture Only」設置爲「No」。 – 2013-05-03 20:03:16

+0

小小更新:IOS_DEPLOY_TGFT與我在xcode項目中使用的不同。糾正它仍然會產生相同的錯誤,但現在它是「armv7」而不是「armv7s」。我似乎無法弄清楚這一點。 – 2013-05-05 11:00:38

回答

3

好了,我的問題是,在我的項目中添加和刪除引用到圖書館了幾次後,我在我的庫搜索路徑相當混亂。此外,我沒有將新的「包含」文件夾(在構建tesseract時創建)添加到用戶標題搜索路徑。

所以,只是一個快速回顧一下,爲了使用的libC++,建立正方體,OCR,因此它可以隨着新的OpenCV的版本工作:

  • 下載leptonica-1.69
  • 下載正方體3.02
  • 排列它們在文件夾結構在原來的教程解釋here
  • 下載this腳本到同一文件夾。
  • 編輯相關IOS_BASE_SDK和IOS_DEPLOY_TGT的腳本。
  • 編輯CXX使用鐺++:CXX = 「在/ usr/bin中/鐺++」
  • 編輯CXXFLAGS使用的libC++的標準庫:CXXFLAGS = 「$ CFLAGS -stdlib =的libC++」
  • 使用腳本和構建tesseract和leptonica。
  • 添加這些庫與您xcode項目,改變「C++標準庫」設置爲在libC++。
  • 確保您的「庫搜索路徑」設置不指向任何舊的正方體庫。
  • 確保您的「用戶頭搜索路徑」設置指向新的「包括」文件夾中創建,當你建立了新庫。
  • 現在,當您嘗試構建項目時,您將會遇到一些缺失的頭文件。只需將它們從tesseract和leptonica舊的「包含」文件夾複製即可。

就是這樣。此時,您將有一個項目能夠同時使用新的OpenCV版本和tesseract 3.02。如果它是一個新項目,不要忘記根據__cplusplus編輯前綴文件以包含OpenCV和Tesseract,並使用它們重命名任何.m文件。毫米

非常感謝this的答案,這讓我很好的在路上。

+0

你可以請共享編譯的庫嗎?有一個問題來建立它。 – Shmidt 2013-05-11 19:32:14

+1

正如你所說的那樣,修復了許多錯誤,除了這一個:*檢查C編譯器是否工作...沒有*。任何想法? – Shmidt 2013-05-12 07:04:01

+0

我其實並沒有檢查構建過程中是否通過了所有的測試。這些圖書館根本沒有建成嗎? – 2013-05-16 09:31:37

2

Tsseract-OCR-iOS已更新以處理此問題(與libC++編譯的項目(例如OpenCV)在同一項目中工作)。安裝時,不要忘記這些步驟:

如果您正在使用iOS7或以上,鏈接的libstdC++ 6.0.9.dylib庫(你的目標=>常規=>鏈接的框架和庫=> + => libstdC++。6.0.9)

轉到您的項目,單擊該項目並在Build Settings選項卡中將-lstdC++添加到所有「Other Linker標誌」鍵。 *轉到您的項目設置,並確保C++標準庫=>編譯器默認值。 (感謝https://github.com/trein

從項目根目錄下的Template Framework Project複製並導入tessdata文件夾。它包含「tessdata」文件。你可以在這裏添加更多的tessdata文件。

*爲了讓OpenCV編譯,我必須將C++標準庫設置爲「libC++」。