2013-09-25 60 views
15

我一直在嘗試構建一個靜態庫,然後在Xamarin中從它創建一個綁定項目。一切正常,直到iOS 7命中。我必須抓住最新版本的本地庫,並嘗試在XCode 5中構建它,但它給我帶來了各種問題。我想認爲它可能與構建過程有關,或者可能與XCode 5中的一些更改設置(與4)相關,但我不確定。XCode 5中的胖庫

我用this腳本來構建其在這個問題上的基於工作的通用二進制:

Build fat static library (device + simulator) using Xcode and SDK 4+

有一件事我沒有注意到的是,以前,在舊的iOS 6.1版本我的二進制(內置在XCode 4中),我的二進制文件大約是24 Mb,現在使用XCode 5時它膨脹到差不多50 Mb!這導致我認爲編譯和鏈接步驟有問題。

任何想法? XCode 5(vs 4)中有其他人遇到了通用二進制文件的問題嗎?

回答

23

我正在使用下面的makefile生成我的庫,即使使用XCode 5和iOS7 SDK也能正常工作。

XBUILD=/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild 
PROJECT_ROOT=. 
PROJECT=$(PROJECT_ROOT)/GIFLibFrontEnd.xcodeproj 
TARGET=GIFLibFrontEnd 

all: libUniversal.a 

libi386.a: 
    $(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphonesimulator -configuration Release clean build 
    -mv $(PROJECT_ROOT)/build/Release-iphonesimulator/lib$(TARGET).a [email protected] 

libArmv7.a: 
    $(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch armv7 -configuration Release clean build 
    -mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a [email protected] 

libArmv7s.a: 
    $(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch armv7s -configuration Release clean build 
    -mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a [email protected] 

libArm64.a: 
    $(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch arm64 -configuration Release clean build 
    -mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a [email protected] 

libUniversal.a: libi386.a libArmv7.a libArmv7s.a libArm64.a 
    lipo -create -output lib$(TARGET)Universal.a $^ 

clean: 
    -rm -f *.a *.dll 
    -rm -rf build 
+1

請原諒我對XCode的無知(這就是我使用Xamarin的原因),但是如何設置make文件?我剛剛使用的腳本剛添加到我的XCode項目中的「構建階段」。這是否類似?或者還有其他一些技巧使用它? –

+0

您應該能夠將我的makefile直接放到您的庫項目文件夾中,並調整PROJECT和TARGET變量以匹配您的項目,並且很好。我的意思是創建一個文件「makefile」並粘貼我的makefile的內容並進行調整。 –

+0

不要忘了後來運行「make」:) –

1

這裏有一個Makefile with the tabs一個鏈接,和我做了一點點的變化,從庫名分離出目標名稱。非常感謝!這解決了我的問題!