2013-09-25 65 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一个链接,和我做了一点点的变化,从库名分离出目标名称。非常感谢!这解决了我的问题!