2008-12-07 458 views
16

有一個我想用於我的iPhone應用程序的開源庫。該庫用C編寫,並使用Makefiles編譯。我想使用靜態庫。爲iPhone創建靜態庫

如果我將.a文件添加到我的項目依賴項中,它可以很好地與模擬器配合使用,但是在定位iPhone SDK(當然,因爲.a文件是針對英特爾平臺編譯的)時它不會鏈接。

我應該用什麼GCC編譯器標記來編譯iPhone SDK的靜態庫?我認爲'-arch'選項會爲我提供一個iPhone架構,但沒有運氣。

任何幫助,將不勝感激。

回答

3

嘗試使用arm-apple-darwin-gcc編譯爲您的GCC應用程序。然後,您可以使用lipo將2個靜態庫(arm和386)合併在一起,以便SIM卡與設備的開發是無縫的。

+0

感謝您的信息。我仍然試圖用arc-apple-darwin-gcc編譯庫... – 2008-12-08 03:50:21

1

經過多次嘗試使用arm GCC編譯器的提示here提示,我放棄了。就我而言,簡單地將庫移植到XCode比試圖爲iPhone編譯靜態庫更簡單。

6

對於基於autoconf的圖書館,我會投票給克里斯托弗Stawarz的生成腳本:

http://pseudogreen.org/blog/build_autoconfed_libs_for_iphone.html

有了這個腳本,可以自動化與單個命令的整個過程,並輕鬆地拿出二進制庫的不同平臺,如iPhoneOS 2.0/2.1/2.2/2.2.1和iPhoneSimulator 2.0/2.1/2.2/2.2.1。

但是,由於the change of Xcode 3.1,$(SDKROOT)構建設置已成爲一些短名稱,如「macosx10.5」,「iphoneos2.2.1」或「iphonesimulator2.2.1」。所以,他在文章中提到的關於在Xcode中爲庫和頭設置搜索路徑的方式不起作用(在Xcode 3.1中)。你需要自己硬編碼路徑。

+2

有人對這個問題有更近的解答嗎? – Alper 2012-08-12 10:14:40

1

只需使用x86 sdk(iphone模擬器)進行編譯,然後再次使用arm/ios平臺(arm-xxx-xxx),然後使用「LIPO」(命令行工具)將兩個靜態庫合併)。工作一種享受,這比重新發明輪子更簡單(至少對於那些小型的庫)......我用liblo和libdmtx做到了這一點,並且我沒有任何問題,並且花了我10分鐘來完成這兩項任務。 :-)