0

ARM アーキテクチャと i386 アーキテクチャの両方に対応する iOS スタティック ライブラリをビルドする bash スクリプトがあります。次に、lipo を使用してバイナリを単一の「結合された」ライブラリに結合し、シミュレーターとデバイスでリンクできるようにします。何らかの理由で、結果のファット ライブラリにリンクしようとすると、デバッグ時に i386 のシンボルが見つからないというリンカ エラーが表示されます。リポを使用する前に、シミュレータまたは 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

結果のライブラリ「build/Release-combined/libMyLibrary.a」に対してリンクを追加すると。リンクの問題が発生します。私は何か間違ったことをしていますか?

ありがとう!

4

1 に答える 1

0

gcc/clang に別のアーキテクチャを構築させる方法は 2 つあります。

-m32または-m64フラグを渡すことができます...

-arch x86_64 -arch i386しかし、Apple clang と Apple gcc で同時に渡すことができるフラグを使用する方がより明示的です。

于 2013-12-13T16:39:35.637 に答える