创建iOS“Fat Library”的问题。

时间:2013-12-12 19:50:34

标签: ios iphone objective-c static-libraries lipo

我有一个bash脚本,可以为ARM和i386架构构建我的iOS静态库。然后我使用lipo将二进制文件组合成一个单独的"组合"库,以便它可以在模拟器和设备上链接。出于某种原因,当我尝试链接到生成的胖库时,我仍然会收到链接器错误,抱怨在调试时找不到i386的符号。我想知道在使用lipo之前我是否没有正确构建模拟器或iphoneos库。有人可以帮助我吗?

这是我的bash脚本:

    if [ $1 == "clean" ]
then
    echo -e "Perform Clean\n"
    if [ -d build ]
    then
        rm -r build
        exit 
    fi      
else
    echo -e "Begin combined build process.\n"
    XCODEBUILD_PATH=/Applications/Xcode.app/Contents/Developer/usr/bin
    XCODEBUILD=$XCODEBUILD_PATH/xcodebuild
    echo -e "xcode build executable path: $XCODEBUILD\nBuiding i386 static library.\n"
    $XCODEBUILD -project MyLibrary.xcodeproj -target "MyLibrary" -sdk "iphonesimulator" -configuration "Release" clean build
    echo -e "Buiding ARM static library.\n"
    $XCODEBUILD -project MyLibrary.xcodeproj -target "MyLibrary" -sdk "iphoneos" -configuration "Release" clean build
    echo -e "Combine ARM and i386 libs.\nOutput: build/combined/libMyLibrary.a\n"
    [ -d build/Release-combined ] || mkdir build/Release-combined 
    lipo -create -output "build/Release-combined/libMyLibrary.a" "build/Release-iphoneos/libMyLibrary.a" "build/Release-iphonesimulator/libMyLibrary.a"
    echo -e "Done!\n"
fi
exit

当我针对生成的lib" build / Release-combined / libMyLibrary.a"添加链接时。我得到了链接问题。我做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

有两种方法可以让gcc / clang构建不同的拱门。

您可以传递-m32-m64标志......

但是更明确的是使用{cone clang和apple gcc中的-arch x86_64 -arch i386标志可以同时传递。