2013-12-12 26 views
0

我有一個bash腳本,爲我的iOS和i386體系結構構建了我的iOS靜態庫。然後,我使用lipo將二進制文件合併爲一個「組合」庫,以便它可以連接到模擬器和設備上。由於某些原因,當我嘗試鏈接到所產生的胖庫時,我仍然遇到連接器錯誤,抱怨在調試時沒有找到i386的符號。我想知道如果在使用lipo之前我沒有正確構建模擬器或iphone庫。有人可以幫我嗎?創建iOS「Fat Library」的問題。

這裏是我的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 「編譯/發佈 - 聯合/ libMyLibrary.a」 鏈接。我得到鏈接問題。難道我做錯了什麼?

謝謝!

+0

'file'報告你有兩個arch? –

+0

是的。它說我實際上有3個libMyLibrary.a:Mach-O通用二進制3個架構 libMyLibrary.a(用於架構armv7):\t當前ar歸檔隨機庫 libMyLibrary.a(用於架構armv7s):\t當前ar歸檔隨機庫 libMyLibrary.a(用於體系結構i386):\t當前ar歸檔隨機庫 – Nick

+0

您缺少x86_64我敢打賭,那是在模擬器中使用的 –

回答

0

那麼有兩種方法可以讓gcc/clang構建一個不同的拱門。

可以通過-m32-m64標誌...

,但它是更加明確使用-arch x86_64 -arch i386標誌這在蘋果鐺和蘋果的gcc可以在同一時間被傳遞。

+0

太棒了。謝謝! – Nick