2016-05-16 11 views
2

iOSプロジェクトで使用するためにCライブラリをコンパイルしようとしていますが、ビットコードを埋め込みたいとします。ビットコードとdylib

私は正常に各archをターゲットとする静的ライブラリを構築できます。これらの静的ライブラリにはビットコードが含まれています(otoolを使用してチェックされています)が、動的ライブラリにはビットコードが含まれていません。どうして? dylibではビットコードがサポートされていませんか?

ビルドしようとしているライブラリはxzです。ここにスクリプトがあります

build_iOS() 
{ 
    ARCH=$1 

    if [ $ARCH == "i386" ] || [ $ARCH == "x86_64" ]; 
    then 
     SDKROOT="$(xcodebuild -version -sdk iphonesimulator | grep -E '^Path' | sed 's/Path: //')" 
    else 
     SDKROOT="$(xcodebuild -version -sdk iphoneos | grep -E '^Path' | sed 's/Path: //')" 
    fi 

    export CC="$(xcrun -sdk iphoneos -find clang)" 
    export CFLAGS="-fembed-bitcode -isysroot $SDKROOT -arch ${ARCH} -miphoneos-version-min=9.0" 
    export LDFLAGS="-arch ${ARCH} -isysroot $SDKROOT" 

    if [ $ARCH == "i386" ] || [ $ARCH == "x86_64" ]; 
    then 
     ./configure --prefix=$XZPATH/build/iOS/$ARCH --host=i686-apple-darwin11 --disable-static --enable-shared 
    else 
     ./configure --prefix=$XZPATH/build/iOS/$ARCH --host=arm-apple-darwin --disable-static --enable-shared 
    fi 

    make && make install && make clean 
} 
build_iOS i386 
build_iOS x86_64 
build_iOS armv7 
build_iOS armv7s 
build_iOS arm64 

ありがとうございます!

答えて

0

私はdylibsにビットコードを追加できないようです。私はいくつかのdylibsを構築した後、otool -l path_to_dylib | grep bitcodeを使ってビットコードが含まれているかどうかをテストし、何も得られませんでした。

より多くの証拠:Xcodeで

  • (7.3.1)、MacOSの(以前と呼ばれるOSのX)ターゲットは、App Thinningのビットコードセクションでビルド設定でアップルを
  • をビットコードオプションを有効にする必要はありません。 macOSではbitcodeについて言及していませんでした。さらに、アプリの削除は、iOS、watchOS、tvOSでのみ利用できます。

現在のところ、macOSアプリケーションでビルド設定でビットコードオプションが有効になっていない理由がわかりません。おそらくMac App StoreがMacアプリを配布する唯一の方法ではないからでしょうか?そして、人々は1つのMacアプリから別のMacアプリにUSBスティックを使って1つのMacアプリをコピーするかもしれませんか?

+0

私はあなたの答えは不明です。サポートビットコード。私はビットコードをサポートしていることを示唆、この答えを見つけた:http://stackoverflow.com/a/38125767/2302437。また、 '-fembed-bitcode'を追加すると、ファイルサイズが大きく増加します。それはなぜですか? –

+0

@BenMartenまあ、私はビットコードもdylibでサポートできると思います!しかし、私が答えの時に行った実験は、私がdylibからビットコードを抽出することができないことを示しました。また、liblzma.aをliblzma.dylibに置き換えようとした後、Xcodeはliblzma.dylibにビットコードが含まれていないと訴えました。たぶん私は間違ったことをしたでしょうか? – Automatic

+0

ビットコードをチェックしたい場合は、 'ebcutil'をチェックしてください:https://github.com/JDevlieghere/LibEBC。 (免責事項:私は図書館の著者です) – Jonas

0

私は、ビットライン対応のダイナミックライブラリのビットコードを、cmdラインツール(otool、file、clang)で確認することができませんでした。また、ビットコードと非ビットコードビルドとの差分を比較すると、ファイルサイズを除いて違いはありませんでした。興味深いことに

私は非ビットコードのビルドを使用するときにアーカイブに失敗し、実際のアプリとアーカイブXcodeで有効ビットコードwithouth動的ライブラリを使用して:

ld: bitcode bundle could not be generated because '...' was built without full bitcode. All frameworks and dylibs for bitcode must be generated from Xcode Archive or Install build for architecture armv7 

ビットコードとdylibを構築するファイルサイズの増加を可能にビットコードが有効になっているサンプルプロジェクトをアーカイブすると、多くのこととxcodeが失敗することはありません。だから私はビットコードが動的なlibに含まれていなければならないと確信していますが、まだコマンドラインツールを使って検証する方法は見つけられていません...

関連する問題