OC與C++混編工程配置
新公司做室內地圖引擎,類似於百度地圖的這種,底層是C++ openGLES寫的一套介面,在這個基礎上需要進行OC的封裝,在這裡寫一些過程中需要注意的點;
先說幾個工程配置的問題:
-ObjC的使用,在TARGETS-build settings-Linking- Other Linker flags中新增的該引數,該引數的使用一般是針對OC catagray的,百度的解釋是:”這個flag告訴連結器把庫中定義的Objective-C類和Category都載入進來。這樣編譯之後的app會變大(因為載入了其他的objc程式碼進來)。但是如果靜態庫中有類和category的話只有加入這個flag才行“,目前暫時不知道該標識是否會影響C++混編;
關於Library路徑搜尋的一點問題:
我們在進行三方庫引用時候經常會發生連結錯誤的問題,工程跑一大堆的紅色錯誤,大多數情況是因為系統引用不到所需要的檔案導致的。一種可能性是工程中的引用檔案已失效,雖然程式碼仍舊在資料夾中,但是沒有與xcode工程掛勾,解決辦法是刪除工程中的目錄,Add Files to ""匯入真實存在的檔案,這種情況一般解決起來比較容易;如果還引用不到,可以到TARGETS-Build Phases-Compile Sources下檢視,把沒有新增到的新增進去;
另外一種是Library,也就是我們常用的靜態庫連結錯誤,一般是工程找不到三方資源的查詢目錄,如果你想檢視你現在的引用查詢目錄,TARGETS-bulid settings-Search path下Library Search Path就能看得到,這時你會發現這裡有兩個Debug和release。
這裡將要新增的路徑是你的靜態庫的搜尋目錄,把目錄路徑新增到裡面就可以了; 不過有一點,我們在工程調拭的時候一般會用到真機和模擬器兩種情況,打過包的同學知道這兩種包的名字是一模一樣的,而且把包檔案一般會分在兩個目錄下,
如上圖這樣子,而我們要新增這樣的庫時會把兩個資料夾放到一個檔案下,這樣有時會導致編譯器查詢不到二進位制的檔案而導致編譯錯誤,所以我們要配置一下Library Search Path;這裡要說一下新增的巨集命令;
$(PROJECT_DIR)/FMMapKit/3rd/${CONFIGURATION}-${PLATFORM_NAME}
如上所示,${CONFIGURATION}巨集表示Debug或者是Release版本的,${PLATFORM_NAME}表示是模擬器還是真機目錄,加上中間的那個”-“,我們看一下是不是跟上圖中顯示的那個目錄名字是對應的呢?在這裡你可以百度一下
接下來要說一下關於C++相關的配置,這裡涉及的應該是與編譯器相關的知識,暫時屬於盲區,有興趣的可以買龍書研究一下,這裡不多說,直接上圖;
還有一項:
哦不對,這裡是兩項;
估計這裡設定的是C++和C的版本,暫時未解;
到此,工程配置先說到這裡,改天繼續;