2016-05-16 5 views
2

Я пытаюсь скомпилировать библиотеку C, чтобы использовать ее в моем проекте iOS, и я хочу встроить биткод.Биткод и dylib

Я могу успешно создавать статические библиотеки, предназначенные для каждой арки. И эта статическая библиотека содержит биткод (проверяется с помощью 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

Похоже, я не могу добавить бит-код в dylib. Я попытался создать несколько dylib, затем используйте otool -l path_to_dylib | grep bitcode, чтобы проверить, содержат ли они какой-либо бит-код, и ничего не получили.

Больше доказательств:

  • в Xcode (7.3.1), MacOS (ранее называлась OS X) цели не включить опцию в настройках битового кода сборки
  • в разделе битового кода из App Thinning, Apple есть не упоминался биткод на macOS. Кроме того, приложение Thinning доступно только на iOS, watchOS и tvOS.

В настоящее время я не знаю, почему в приложениях macOS нет опции разрешить бит-код в настройках сборки. Может быть, это потому, что Mac App Store - это не единственный способ распространения приложений для Mac? И люди могут копировать одно приложение mac из одного приложения mac в другое с помощью USB-накопителей?

+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

Я не смог проверить биткод в динамической библиотеке с включенным битом, используя инструменты командной строки (otool, file или clang). Кроме того, сравнение различий между битовым и небитовым кодами не отличалось, за исключением размера файла.

Интересно при использовании динамической библиотеки withouth битового кода включен в реальном приложении и архивирования 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 с битовым кодом позволил FileSize увеличивается много, а также xcode не терпит неудачу при архивировании примерного проекта с включенным битовым кодом. Поэтому я уверен, что бит-код должен быть включен в динамический lib, хотя мы не нашли способ проверить, что с помощью инструментов линии cmd еще нет ...

Смежные вопросы