【问题标题】:Fat libraries in XCode 5XCode 5 中的胖库
【发布时间】:2013-10-01 09:30:45
【问题描述】:

我一直在尝试构建一个静态库,然后在 Xamarin 中从中创建一个绑定项目。在 iOS 7 发布之前,一切都运行良好。我不得不获取最新版本的本地库并尝试在 XCode 5 中构建它,但它给我带来了各种各样的问题。我认为这可能与构建过程有关,或者可能与 XCode 5(与 4)中的某些更改设置有关,但我不确定。

我正在使用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)中遇到过通用二进制文件的问题?

【问题讨论】:

    标签: iphone xcode xamarin universal-binary


    【解决方案1】:

    我正在为我的库使用下面的 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 $@
    
    libArmv7.a:
        $(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch armv7 -configuration Release clean build
        -mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a $@
    
    libArmv7s.a:
        $(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch armv7s -configuration Release clean build
        -mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a $@
    
    libArm64.a:
        $(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch arm64 -configuration Release clean build
        -mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a $@
    
    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
    

    【讨论】:

    • 请原谅我对 XCode 的无知(这就是我使用 Xamarin 的原因),但是如何设置 make 文件?我使用的脚本刚刚添加到 XCode 项目的“构建阶段”中。这是相似的吗?或者还有什么其他技巧可以使用它?
    • 您应该能够将我的 makefile 直接拖放到您的库项目文件夹中,并调整 PROJECT 和 TARGET 变量以匹配您的项目并且一切顺利。我的意思是创建一个文件“makefile”并粘贴我的makefile的内容并进行调整。
    • 之后别忘了运行“make” :)
    • 谢谢。我试试看。
    • 如果您收到“缺少分隔符”错误,很可能是因为您的 makefile 中需要制表符而不是空格。
    【解决方案2】:

    这里有一个Makefile with the tabs 的链接,我做了一点改动,将目标名称与库名称分开。非常感谢!这解决了我的问题!

    【讨论】:

      猜你喜欢
      • 2011-07-18
      • 1970-01-01
      • 2020-12-06
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 2023-04-08
      相关资源
      最近更新 更多