orbslam移植到ios上 靜態庫的製作3

2021-09-29 10:25:25 字數 2347 閱讀 1555

前面的準備工作:把orbslam移植到macos上了

現在是:把macos上的c++工程通過xcode移植到ios真機上

xcode:11版本

新建工程

新建乙個ios工程2+工程檔案基礎認識

生成.a靜態庫

xcode生成.a靜態庫,並引用

更細的對靜態庫 ios的乙個梳理與操作

靜態庫檔案,如果有多個類,一般是有乙個專門的.**件把其它.**件全部匯入,方便開發者使用

靜態庫檔案:隱藏.m實現**

最後生成的.a檔案必須和.**件一起使用

我現在是想把dbow2編譯成靜態庫,然後給我的主程式呼叫

1- 先按照上面教程建立乙個靜態庫工程

2- 然後分別把dbow2的.h 和 .cpp檔案拷貝到新建的工程中

4- 然後像下圖這樣操作,匯入opencv依賴庫

5- 然後點一下專案名,在build phases下的copy bundle resources下面新增所有的庫檔案,這樣匯出.a檔案時,也會匯出所有庫檔案

6- 編譯執行,products下面會生成.a靜態庫檔案

最終靜態庫的呼叫,是要把.a靜態庫檔案和.h .hpp(這個是標頭檔案庫檔案都寫在了乙個檔案中,一般是可以暴露給外界的,會這麼寫)拷過去的。

後面發現還少了一些依賴庫沒有導進去,social.framework,photos.framework,uikit.framework

呼叫靜態庫檔案

呼叫的時候,遇到了一些問題,像c++裡面的庫檔案 map vector這些匯入都會報錯,說:expected unqualified

oc工程中使用c++類

有時我們需要在oc的程式中使用已有的c++類,這時,我們可以把oc類的.m檔案字尾改為.mm,就可以在裡面使用c++類了。但是二者直接混用會出現一些問題以致編譯無法通過,這時可以簡單的通過把target中的compile source as改為oc++就可以通過編譯。這是乙個簡單的做法,但兩個世界確實很不一樣,如此這樣的深度混合有時會變地很棘手。

所以我把在viewcontroller.mm裡面的#import 「dbow.h」換成@class dbow2;,但是遇到了新的問題:

上圖的錯,最終是通過將target->build settings->compile source as,從objective-c++改為objective-c,編譯成功的

==》.**件中 』vector』 『iostream』 file not found

網上大部分解決方案是把compile sources as設定項修改為objective-c++,但是這樣會引發我其他錯誤(在後面一篇有寫到)

glib移植到ARM上

1.說明 在arm上移植glib庫很麻煩,所依賴的包很多,本次移植涉及到的包主要有libffi 3.0.13.tar.gz,gettext 0.18.3.tar.gz。涉及到的工具有glib genmarshal,glib compile schemas,automake.2.配置 configur...

Linux程式移植到Android上

序言 由於本人還是比較偏重於先說明原理在說明實際操作步驟,要知其然更要知其所以然,如下圖所示 一般情況下,有兩種方法。1.乙個就是將程式靜態編譯,將程式中所有需要的庫全部編譯進可執行檔案中。這樣程式在android中執行就不需要鏈結任何動態庫了。但是帶來乙個非常大的弊端就是這個程式會非常大,資源利用...

將WebServer Boa移植到ARM上

www.boa.orttar zxf boa 0.94.13.tar.gz1.開啟compat.h 將 define timezone offset foo foo tm gmtoff 修改為 define timezone offset foo foo tm gmtoff 2.開啟boa.c檔案將...