Библиотека iOS webRTC, поддерживающая armv7 и arm64

Как я могу получить библиотеку webRTC, которая будет поддерживать как armv7, так и arm64 в iOS?


person Dev    schedule 10.02.2015    source источник


Ответы (3)


Везет вам. Я только что закончил интегрировать webrtc в свой проект на пару дней. Мое решение, как показано ниже:

  1. Объедините все *.a, которые вы создали для armv7, в libWebRTC-armv7.a: используя командные строки, как показано ниже.

    libtool -static -o src/out_ios_armv7/Release-iphoneos/libWebRTC-temp.a src/out_ios_armv7/Release-iphoneos/*.a

    strip -S -x -o src/out_ios_armv7/Release-iphoneos/libWebRTC-armv7.a -r src/out_ios_armv7/Release-iphoneos/libWebRTC-temp.a

  2. Объедините все *.a, которые вы создали для arm64, в libWebRTC-arm64.a:

    libtool -static -o src/out_ios/Release-iphoneos/libWebRTC-temp.a src/out_ios/Release-iphoneos/*.a

    strip -S -x -o src/out_ios/Release-iphoneos/libWebRTC-arm64.a -r src/out_ios/Release-iphoneos/libWebRTC-temp.a

  3. Создайте свой libWebRTC с поддержкой как armv7, так и arm64:

    lipo -create src/out_ios_armv7/Release-iphoneos/libWebRTC-armv7.a src/out_ios/Release-iphoneos/libWebRTC-arm64.a -output libWebRTC.a

P.s: Просто соберите свою библиотеку armv7 в отдельную папку с помощью arm64:

export GYP_GENERATORS="ninja"
export GYP_DEFINES="build_with_libjingle=1 build_with_chromium=0 libjingle_objc=1 OS=ios target_arch=armv7"
export GYP_GENERATOR_FLAGS="$GYP_GENERATOR_FLAGS output_dir=out_ios_armv7"
export GYP_CROSSCOMPILE=1
pushd src
gclient runhooks
ninja -C out_ios_armv7/Release-iphoneos AppRTCDemo
popd
person phuongle    schedule 10.02.2015

Вы можете обратиться к нашему блогу:

http://io.diveinedu.com/2015/02/02/%E7%AC %AC%E4%BA%94%E7%AB%A0-WebRTC%E7%9A%84iOS%E6%A1%86%E6%9E%B6%E7%BC%96%E8%AF%91.html

Я написал сценарий оболочки для создания источников WebRTC в фреймворке (за исключением сигнальной библиотеки apprtc) для использования в iOS.

Если вы не умеете читать по-китайски, вы просто прочитали этот сценарий, встроенный в этот блог, и этого достаточно! Ага.

./build_webrtc.sh build_all

Может быть ошибка в устройстве armv7. эта ошибка была вызвана проблемой переполнения стека при декодировании VP8 в неоновой функции armv7.

Вы можете подтвердить этот патч, чтобы исправить сбой для него:

diff --git a/source/libvpx/vp8/common/arm/neon/vp8_subpixelvariance_neon.c b/source/libvpx/vp8/common/arm/neon/vp8_subpixelvariance_neon.c
index 8308d55..a66b6f5 100644
--- a/source/libvpx/vp8/common/arm/neon/vp8_subpixelvariance_neon.c
+++ b/source/libvpx/vp8/common/arm/neon/vp8_subpixelvariance_neon.c
@@ -1003,7 +1003,7 @@ unsigned int vp8_sub_pixel_variance8x8_neon(
         const unsigned char *dst,
         int dst_stride,
         unsigned int *sse) {
-  DECLARE_ALIGNED_ARRAY(kAlign16, uint8_t, temp2, kHeight8 * kWidth8);
+  DECLARE_ALIGNED_ARRAY(kAlign16, uint8_t, temp2, kHeight8PlusOne * kWidth8);
   DECLARE_ALIGNED_ARRAY(kAlign16, uint8_t, fdata3, kHeight8PlusOne * kWidth8);
   if (xoffset == 0) {
     var_filter_block2d_bil_w8(src, temp2, src_stride, kWidth8, kHeight8,

Желаю, чтобы это могло помочь вам!

Студенты diverinedu.com только что преодолели и исправили эту ошибку.

person Cheetah    schedule 10.02.2015
comment
Я следовал вашему руководству, но когда скрипт работает над объединением библиотек armv7 и arm64, возникает ошибка, что обе библиотеки не могут иметь одинаковую структуру. Также я попытался запустить сборку arm64 на iPhone 6 и iPad 3, но я получаю сообщение об ошибке недопустимой архитектуры. - person Omer Waqas Khan; 22.09.2015

спасибо phuongle, это действительно работает...

...но с изюминкой...

... как заметил Омер Вакас Хан, может быть случай, когда может появиться сообщение об ошибке (во время липосакции): обе библиотеки не могут иметь одинаковую структуру.

Я, конечно, пошел WTF...липо, что с тобой...они разного строения...Я ИХ ТАК ПОСТРОИЛ...

Но потом я решил перепроверить это:
- Я зашел в папку, где у меня была библиотека arm64_merged, и...

lipo -info lib's_name.a

Он сообщил, что относится к типу armv7 и arm64. Озадаченный, я тогда...

lipo -info *.a

... все библиотеки (из них 72) сообщили, что они имеют тип arm64, кроме 2...

libisac_fix.a
libisac_neon.a

По какой-то причине они были armv7. Ранее в тот же день я использовал клон webrtc «несколько дней назад». В то время я помню, что всегда получал только 70 библиотек. Но потом, по другим причинам, я решил

gclient sync

После этого я получил 72... поэтому я просто удалил ерунду libisac. Теперь 2 fat_libs были разных типов, и я мог успешно провести липосакцию.

person Florin Odagiu    schedule 24.11.2015