位码和dylib

我想编译一个C库来在我的iOS项目中使用它,并且我想embeddedbitcode。

我可以成功构build针对每个拱形的静态库。 而那些静态库确实包含位码(使用otool进行检查),但dynamic库不包含位码。 为什么? 在dylib中不支持bitcode?

我正在试图build立的图书馆是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 

谢谢!

它看起来像我不能添加bitcode到dylibs。 我尝试build立几个dylib,然后使用otool -l path_to_dylib | grep bitcode otool -l path_to_dylib | grep bitcode来testing它们是否包含任何bitcode,都什么都没有。

更多证据:

  • 在Xcode(7.3.1)中,macOS(以前称为OS X)目标在构build设置中没有启用位代码选项
  • 在App Thinning的位代码部分,苹果没有提到macOS上的位码。 此外,应用程序细化仅适用于iOS,watchOS和tvOS。

我目前不知道为什么macOS应用程序在编译设置中没有启用位代码选项。 也许这是因为Mac App商店不是分发Mac应用程序的唯一途径? 人们可能使用USB记忆棒将一个Mac应用程序从一个Mac应用程序复制到另一个应用程序?

我无法通过cmd行工具(otool,file或clang)validation启用位代码的dynamic库中的位代码。 比较bitcode和non-bitcode build之间的差异也没有显示出差别,除了文件大小。

有趣的是,当在实际应用程序中使用没有启用bitcode的dynamic库时,当我使用非bitcode构build时,xcode将无法归档:

 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 

在启用bitcode的情况下构builddylib时,文件大小会增加很多,而且xcode在启用位代码的情况下归档示例项目时不会失败。 所以我非常确定位代码必须包含在dynamic库中,尽pipe我们还没有find通过cmd行工具validation的方法。

Interesting Posts