代码之家  ›  专栏  ›  技术社区  ›  Automatic

位码和dylib

  •  2
  • Automatic  · 技术社区  · 10 年前

    我正在尝试编译一个C库,以便在我的iOS项目中使用它,我想嵌入位代码。

    我可以成功构建针对每个拱门的静态库。这些静态库确实包含位代码(使用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
    

    谢谢

    2 回复  |  直到 10 年前
        1
  •  0
  •   Automatic    10 年前

    看起来我不能给dylibs加比特码。我试着做了几架Dylbs,然后用 otool -l path_to_dylib | grep bitcode 为了测试它们是否包含任何比特码,它们都没有得到任何信息。

    更多证据:

    • 在Xcode(7.3.1)中,macOS(以前称为OS X)目标在构建设置中没有启用位码选项
    • 在的位代码部分 App Thinning ,苹果没有在macOS上提到比特码。此外,应用精简仅在iOS、watchOS和tvOS上可用。

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

        2
  •  0
  •   electronix384128    10 年前

    我无法通过cmd行工具(otool、file或clang)验证启用位码的动态库中的位码。此外,比较位码和非位码版本之间的差异也没有什么区别,只是文件大小不同。

    有趣的是,如果在实际应用程序中使用未启用位代码的动态库,并且在使用非位代码构建时,存档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
    

    当使用启用位代码的方式构建dylib时,文件大小会大大增加,而且xcode在使用启用位码的方式归档示例项目时不会失败。因此,我非常确定动态库中必须包含位代码,尽管我们还没有找到通过cmd行工具验证的方法。。。